2017-04-18 135 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。随意在这里把这个答案。 –

相关问题