使用python-swiftclient上传内存Zip文件时遭遇Error 422: Unprocessable Entity错误的求助
python-swiftclient上传内存Zip文件时遭遇Error 422: Unprocessable Entity错误的求助
我正在用python-swiftclient和zipfile写一个Python脚本,目的是把文件压缩后上传到OpenStack对象存储的Swift API端点。我把压缩好的数据存在内存里,用的是io.BytesIO对象。
下面是我的代码片段:
import io import zipfile arc_name = 'test.zip' zip_buffer = io.BytesIO() # 注:原代码疑似笔误,已修正为正确的ZipFile初始化方式 with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, True) as zip_file: for file in files: with open(file, 'rb') as src_file: zip_file.writestr(arc_name, src_file.read())
...
import base64 import hashlib import swiftclient zip_data = zip_buffer.getvalue() checksum_base64 = base64.b64encode(hashlib.md5(zip_data).digest()).decode() swift_conn = swiftclient.Connection(<creds>) container_name = 'swift-test' swift_conn.put_object( container=container_name, contents=zip_data, content_type=None, obj=arc_name, etag=checksum_base64 )
运行后我遇到了如下错误:
swiftclient.exceptions.ClientException: Object PUT failed: https://..../swift/v1/swift-test/test.zip 422 Unprocessable Entity
我查了一些关于HTTP 422错误的问题,觉得问题应该出在content_type(MIME类型)上。我试过设置'application/zip'和'multipart/mixed',但不管用哪种,都会报同样的错误。
如果有更合适的MIME类型,或者我还有其他没注意到的细节问题,希望大家能给我一些帮助,谢谢!
备注:内容来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

