如何使用Python请求库和unicode文件名进行多部分上传?

Phi*_*mer 4 python unicode utf-8 python-requests

我正在尝试使用其REST API将文件上传到JIRA.上传是作为多部分POST完成的.只要文件名是ASCII,代码就可以正常工作.如果它们包含任何非ASCII字符,则JIRA会给出500错误.

我试图通过在POST操作中编码文件名来纠正它,文件上传成功,但JIRA显示编码文件名的ASCII版本,而不是将文件名解码为原始UTF-8.

以下是Python代码的片段:

files = {'file': (urllib2.quote(zd_attachment['file_name'].encode('utf8')), open('/tmp/%s' % zd_attachment['file_name'], 'rb'), zd_attachment['content_type'])}
mp_header = {'X-Atlassian-Token': 'nocheck'}
r = requests.post("%s/rest/api/2/issue/%s/attachments" % (jira_url, issue_id), headers=mp_header, files=files, auth=jira_auth)
Run Code Online (Sandbox Code Playgroud)

我使用错误的方法来编码文件名吗?为了正确处理Unicode文件名,我是否遗漏了其他内容?

Sjo*_*erd 6

Urllib3使用错误的编码方法来处理非ASCII文件名(问题,拉取请求).解决方法是创建自己的PreparedRequest或实现auth处理程序,并在发送之前更改请求的正文.我的博客文章中有一些关于此的例子.