我正在研究 Django、python 和应用程序引擎,谁能告诉我使用 urllib2 将 pdf 文件发送到 url,(文件是 InMemoryUploadedFile)。我知道 SOF 中存在一个问题,即使用 urllib2 发送数据,数据为 JSON 格式。但在这里我想发送一个 InMemoryUploadedFile,它是从 html 页面上传的 pdf 文件。提前致谢...
问问题
206 次
1 回答
1
您可能想查看Python:HTTP Post a large file with streaming。
您将需要使用mmap在内存中流式传输文件,然后将其request
设置为 并将标头设置为适当的 mime 类型,即application/pdf
在打开 url 之前。
import urllib2
import mmap
# Open the file as a memory mapped string. Looks like a string, but
# actually accesses the file behind the scenes.
f = open('somelargefile.pdf','rb')
mmapped_file_as_string = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
# Do the request
request = urllib2.Request(url, mmapped_file_as_string)
request.add_header("Content-Type", "application/pdf")
response = urllib2.urlopen(request)
#close everything
mmapped_file_as_string.close()
f.close()
由于 Google 应用引擎没有 mmap,您可能需要request.FILES
暂时将文件写入磁盘
#f is the file from request.FILES
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
然后使用标准文件操作直接从那里读取文件。
另一种选择是使用StringIO将文件作为字符串写入内存,然后将其传递给urlib2.request
. 与使用流相比,这在多用户环境中可能效率低下。
于 2012-10-26T08:54:44.593 回答