requests.put上傳文件Content-Disposition被寫進了文件里


用requests.put上傳文件

files = {'file':open(filepath,'rb').read()}
rs = requests.put(url=url, headers=headers,files=files)

上傳成功后,打開上傳成功的文件,發現請求頭被寫進了文件

--7deceadf843ce58e38485caec636a5bc
Content-Disposition: form-data; name="file"; filename="hmy.txt"

huangmanyao
--7deceadf843ce58e38485caec636a5bc--

解決方案

rs = requests.put(url=url,headers=headers,data=open(filepath,'rb'))

 

使用requests.put()files參數發送一個多部分/表單數據編碼的請求,即使聲明了正確的內容類型,服務器似乎也無法在不損壞數據的情況下處理該請求。

curl命令只是使用請求主體中包含的原始數據執行PUT。您可以通過在data參數中傳遞文件數據來創建類似的請求。指定標題中的內容類型:

headers = headers = {'Content-type': 'image/jpeg', 'Slug': fileName}
r = requests.put(url, data=open(path, 'rb'), headers=headers, auth=('username', 'pass'))

您可以根據需要改變Content-type頭以適應負載。

嘗試為文件設置Content-type

如果您確定它是一個文本文件,那么請嘗試text/plain您在curl命令中使用的text/plain,即使您似乎正在上載一個jpeg文件?但是,對於jpeg圖像,應該使用image/jpeg

否則,對於任意二進制數據,可以使用application/octet-stream

openBin = {'file': (fileName, open(path,'rb'), 'image/jpeg' )}

另外,不需要顯式地讀取代碼中的文件內容,requests將為您執行此操作,因此只需傳遞上面所示的打開文件句柄。

 

參考資料:https://www.cnpython.com/qa/92618

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM