上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件。现在把经验记录下来,下次有类似的需求能提高开发效率。
我使用的是网宿CDN,没有用网宿的SDK,直接python封装表单上传文件。
使用post 上传文件需要封装HTTP 消息头:
Content-Type:multipart/form-data; boundary=<boundary> # boundary 是分隔符,表示使用<boundary>作为body体分割符
Accept: */*
Content-Length: XXXX
--<boundary> #开始必须使用“--分隔符”作为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的二进制数据”
--<boundary>-- #body体结束标记
/r/n
LIMIT = '----------lImIt_of_THE_fIle_eW_$' CRLF = ' ' L = [] for (key, value) in fields: L.append('--' + LIMIT) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files: 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)