2017-04-18 153 views
3

我一直在尋找很多,我還沒有找到我正在尋找的答案。如何使用file.upload和請求上傳文件slack使用

我試圖從/tmp上傳一個文件到使用python請求,但我不斷收到{"ok":false,"error":"no_file_data"}返回。

file={'file':('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf')} 
payload={ 
     "filename":"myfile.pdf", 
     "token":token, 
     "channels":['#random'], 
     "media":file 
     } 

r=requests.post("https://slack.com/api/files.upload", params=payload) 

晴試圖照做發佈here

+0

我沒有看到在API文檔了'media' PARAM。嘗試將''media':file'改爲''content':open('/ tmp/myfile.pdf','r')。read()' – jordanm

+0

這將返回一個413錯誤,'r.text'返回一個HTML讀取的文件'該請求不能被滿足。壞請求' –

回答

8

通過HTTP發送文件需要比發送其它數據多一點額外的工作。您必須設置內容類型並獲取文件以及所有內容,因此您不能僅將它包含在請求中的​​參數中。

您必須將文件信息提供給.post方法的files參數,以便它可以將所有文件傳輸信息添加到請求中。

my_file = { 
    'file' : ('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf') 
} 

payload={ 
    "filename":"myfile.pdf", 
    "token":token, 
    "channels":['#random'], 
} 

r = requests.post("https://slack.com/api/files.upload", params=payload, files=my_file) 
+0

謝謝!這對我的筆記本電腦上的蟒蛇工作。我想在節點MCU上的micropython上進行測試。順便說一下,我上傳了一個「txt」文件,它顯示爲鬆弛頻道中的一個片段。我將上傳大型日誌文件,因此是否有限制的鬆散大小? – Eradicatore

+0

好吧,它並不適用於micropython。 「文件」參數不適用於post方法。讓我知道你是否有想法可能。 – Eradicatore

+0

我回答你的MicroPython論壇帖子:https://forum.micropython.org/viewtopic.php?p=23388#p23388。隨意在這裏把這個答案。 –

相關問題