在POST请求中发送多个文件
我正在尝试在一个POST请求中发送多个文件。以下是我使用的代码。
orig_src = "./orig_src/"
url = "http://"+server+":"+port+"/my_service"
files = []
for root, dirs, files in os.walk(orig_src):
for fileName in files:
if len(files) > 0:
relDir = os.path.relpath(root, orig_src)
relFile = os.path.join(relDir, fileName)
files.append(('srcFile', (fileName, open(orig_src+relFile, 'rb'))))
response = requests.post(url, files = files)
当我尝试这样做时,出现了以下错误:
File "/usr/lib/python2.7/posixpath.py", line 66, in join
if b.startswith('/'):
AttributeError: 'tuple' object has no attribute 'startswith'
你知道错误可能出在哪里吗?之前我使用-F选项创建了一个curl请求,并通过os.system命令运行,那个是没问题的。但现在我无法发送这个POST请求,我哪里出错了呢?
1 个回答
1
你在使用 os.path.join
的时候传入了一个元组,正如错误提示所说的那样(in join
)。
你需要给传给 requests 的列表起个更好的名字,因为你在声明它为空列表后又重复使用了 files
这个名字。
- 首先,你在第3行把
files
定义为空列表 - 然后,在第4行的循环中,你把
files
定义成了从元组中解包得到的第三个项目。
因为你是在原地修改 files
,所以你实际上是把元组添加到了这个列表里。Python 认为你应该明白这一点,最后会遍历这个列表,直到找到第一个元组。在这种情况下,fileName
现在是一个元组,而你把它传给了 os.path.join
,但这个函数期待的是一个字符串,而不是元组。
只要把这两个定义中的一个改一下,你就没问题了。