Python请求zip上传使得zipfile在Windows

时间:2018-03-15 11:32:22

标签: python curl python-requests

我正在尝试使用Python请求将zipfile上传到服务器。上传工作正常。但是,无法使用Windows资源管理器或方舟打开上载的文件。我想mime-type或content-Length存在一些问题。

奇怪的是,使用curl上传文件似乎不会导致同样的问题。 这是我的请求的python代码:

s = requests.Session()
headers = {'Content-Type': 'application/zip'}    

zip = open('file.zip, 'rb')
files = {'file': ('file.zip', zip, 'application/zip')}             
fc = {'Content-Disposition': 'attachment; filename=file.zip'} 
headers.update(fc)

r = requests.Request('POST', url, files=files, headers=headers, auth=(user, password))  

prepared = r.prepare()

resp = s.send(prepared)

这是卷曲代码,完美无缺:

curl -X POST \
    -ik \
    -u user:password \
    --data-binary '@file.zip' \
    -H 'Content-Type: application/zip' \
    -H "Content-Disposition: attachment; filename=file.zip" \
    url

上传文件同时工作,服务器似乎也识别出内容类型。但是,重新下载时文件将无效。在通过请求发送之前或使用--data-binary以正常卷曲发送之后,zifile是可读的。 用unip或file-roller打开下载的zifile工作。

编辑: 我连续上传了两个文件。奇怪的是,当以相反的顺序上传完全相同的文件时,错误被修复了。 这不是一个python问题。尝试使用标准卷曲时 我一定是不小心颠倒了订单,这就是它一直在运作的原因。

我无法解释这种行为,也无法解决这个问题。 总结:首先上传较大的文件就可以了。

以上所有内容似乎都适用于curl,pycurl和python请求,因此我认为它是某个curl库中的某种错误。

0 个答案:

没有答案