上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件。现在把经验记录下来,下次有类似的需求能提高开发效率。
我使用的是网宿CDN,没有用网宿的SDK,直接python封装表单上传文件。
使用post 上传文件需要封装HTTP 消息头:
Content-Type:multipart/form-data; boundary= # boundary 是分隔符,表示使用作为body体分割符
Accept: */*
Content-Length: XXXX
-- #开始必须使用“--分隔符”作为body体的第一行,需要注意--一定不能丢
Content-Disposition: form-data; name="XXX"
/r/n # 注意 name跟value之间一定要空一行
XXX_Value # 表单XXX对应的Value值
Content-Dispositon: form-data; name='file'; filename='abc.png'
Content-Type: image/png
/r/n
“png的二进制数据”
---- #body体结束标记
/r/n
LIMIT = '----------lImIt_of_THE_fIle_eW_$'CRLF= '\r\n'L=[]for (key, value) infields:
L.append('--' +LIMIT)
L.append('Content-Disposition: form-data; name="%s"' %key)
L.append('')
L.append(value)for (key, filename, value) infiles:
L.append('--' +LIMIT)
L.append('Content-Disposition: form-data; name="%s"; filename="%s"' %(key, filename))
L.append('Content-Type: %s' %get_content_type(filename))
L.append('')
L.append(value)
L.append('--' + LIMIT + '--')
L.append('')
body= CRLF.join(L)