用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