我正在尝试使用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库中的某种错误。