解决Python向阿里云OSS上传文件时报错400

如题,该问题并不是100%出现。出错时服务器返回信息如下:

<?xml version="1.0" encoding="UTF-8"?> <Error> <Code>InvalidArgument</Code> <Message>The bucket POST must contain the specified 'key'. If it is specified, please check the order of the fields</Message> <RequestId>C21E709A5EC76E5ED07C0D43</RequestId> <HostId>oss.example.com</HostId> <ArgumentName>key</ArgumentName> <ArgumentValue></ArgumentValue> </Error>

官网文档对 The bucket POST must contain the specified ‘key’. If it is specified, please check the order of the fields 解释如下:

那么问题就明确了:由于在POST时使用了字典,其中的顺序并不是固定的。当key键排在file键后面时错误便会出现。解决方法也很简单,使用collections.OrderedDict。它是有序字典,可以明确键值对的添加顺序:

import collections content = collections.OrderedDict() content ['key'] = 'file_key' ... content ['file'] = your_file

这样提交之后键值的顺序便会固定,不再出现上述问题。