Estou escrevendo meu primeiro pedido de frasco. Estou lidando com uploads de arquivos e basicamente o que desejo é ler os dados / conteúdo do arquivo enviado sem salvá-lo e imprimi-lo na página resultante. Sim, estou assumindo que o usuário sempre carrega um arquivo de texto.
Aqui está a função de upload simples que estou usando:
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
a = 'file uploaded'
return render_template('upload.html', data = a)
No momento, estou salvando o arquivo, mas o que preciso é dessa variável 'a' para conter o conteúdo / dados do arquivo .. alguma ideia?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
coloca o arquivo carregado (na solicitação) em um var ("f"). Emf.read()
seguida, funciona usando o código acima. quando éprint f.read()
que recebo o lixo correto procurando no terminal. Espero que ajude.mystring = TextIOWrapper(binary_stream)
f.read()
não rendeu nada para mim também. Ligar primeirof.seek(0)
fez o truque para mim.Se você quiser usar o Flask padrão - não há como evitar o salvamento de um arquivo temporário se o tamanho do arquivo enviado for> 500kb. Se for menor que 500kb - ele usará "BytesIO", que armazena o conteúdo do arquivo na memória, e se for maior que 500kb - ele armazena o conteúdo em TemporaryFile () (conforme indicado na documentação do werkzeug ). Em ambos os casos, o script será bloqueado até que todo o arquivo carregado seja recebido.
A maneira mais fácil de contornar isso que encontrei é:
1) Crie sua própria classe IO semelhante a um arquivo, onde você faz todo o processamento dos dados de entrada
2) Em seu script, substitua a classe Request pela sua:
3) Substitua o request_class do Flask pelo seu:
4) Vá tomar uma cerveja :)
fonte
Eu estava tentando fazer exatamente a mesma coisa, abrir um arquivo de texto (um CSV para Pandas na verdade). Não quero fazer uma cópia dele, só quero abri-lo. O formulário-WTF tem um bom navegador de arquivos, mas depois abre o arquivo e cria um arquivo temporário, que apresenta como um fluxo de memória. Com um pouco de trabalho sob o capô,
fonte
Eu compartilho minha solução (assumindo que tudo já está configurado para se conectar ao balde do google no frasco)
Minha publicação
Direto para o Google Bucket em frasco
fonte
No caso de desejarmos despejar o arquivo na memória para o disco. Este código pode ser usado
fonte
Simplesmente fizemos:
fonte
em função
em arquivo html
fonte