Estou executando uma tarefa simples de upload de um arquivo usando a biblioteca de solicitações Python. Pesquisei Stack Overflow e ninguém parecia ter o mesmo problema, ou seja, que o arquivo não é recebido pelo servidor:
import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)
Estou preenchendo o valor da palavra-chave 'upload_file' com meu nome de arquivo, porque se eu deixar em branco, ele diz
Error - You must select a file to upload!
E agora eu consigo
File file.txt of size bytes is uploaded successfully!
Query service results: There were 0 lines.
Que só aparece se o arquivo estiver vazio. Então, estou sem saber como enviar meu arquivo com sucesso. Eu sei que o arquivo funciona porque se eu entrar neste site e preencher manualmente o formulário, ele retorna uma boa lista de objetos correspondentes, que é o que procuro. Eu realmente aprecio todas as dicas.
Alguns outros tópicos relacionados (mas não respondem ao meu problema):
fonte
files = [('attachment', open('attachment1.txt', 'rb')), ('attachment', open('attachment2.txt', 'rb'))]
. Cada tupla é um par de chave e valor.files={'file':('nameoffile',open('namoffile','rb'),'Content-Type':'text/html','other header'),'file2':('nameoffile2',open('nameoffile2','rb'),'Content-Type':'application/xml','other header')}
mas se files = {} for usado, headers = {'Content-Type': 'blah blah'} não deve ser usado! -> @ martijn-pieters: porque o tipo de conteúdo multipart / form-data deve incluir o valor limite usado para delinear as partes no corpo da postagem. Não definir o cabeçalho Content-Type garante que as solicitações o definam com o valor correto.requests
?with open(...) as fobj:
e usefobj
nofiles
mapeamento.(2018) a nova biblioteca de solicitações python simplificou esse processo, podemos usar a variável 'arquivos' para sinalizar que queremos fazer o upload de um arquivo codificado em várias partes
fonte
lsof
, parece que o arquivo permanece aberto, ou pelo menos é assim que interpreto os seguintes resultados. Antes, rodando oopen
não há registro nalsof
tabela sobre ofilename
. Depois deopen
executado, vários registros aparecem comread
acesso. Após a execução dorequests.post
, os registros continuam lá indicando que o arquivo não foi fechado.Upload de cliente
Se você deseja fazer upload de um único arquivo com a
requests
biblioteca Python , então o request lib suporta uploads de streaming , que permitem enviar arquivos grandes ou fluxos sem ler na memória .Lado do Servidor
Em seguida, armazene o arquivo
server.py
lateralmente de forma que salve o fluxo em um arquivo sem carregar na memória. A seguir está um exemplo com o uso de uploads de arquivo Flask .Ou use a análise de dados de formulário werkzeug, conforme mencionado em uma correção para o problema de " uploads de arquivos grandes consumindo memória ", a fim de evitar o uso ineficiente da memória no upload de arquivos grandes ( arquivo st 22 GiB em ~ 60 segundos. O uso de memória é constante em cerca de 13 MiB.).
fonte
No Ubuntu você pode aplicar desta forma,
para salvar o arquivo em algum local (temporário) e depois abri-lo e enviá-lo para a API
fonte
data
variável?