上周產品給我提了個需求,大體是做一個后台系統,管理游戲比賽落地頁的數據更新,難點在於需要給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 = '\r\n' 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)