我正在尝试在帖子请求中发送多个文件。以下是我使用的代码。
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命令运行它。那很好。但我现在无法发送帖子请求。我哪里错了?
答案 0 :(得分:1)
您正在将元组传递给os.path.join
,因为追溯会解释(in join
)。
您需要为您传递给请求的列表提供更好的名称,因为您在将其声明为空列表后重复使用名称files
。
files
定义为第3行的空列表files
定义为您在第4行的for循环中解压缩的元组中收到的第三个项目。由于您正在修改files
,因此您需要将元组添加到列表中。 Python期望你理解这一点并最终遍历列表直到它到达第一个元组。在这种情况下,fileName
现在是一个元组,你将它传递给os.path.join
,它需要一个字符串,而不是一个元组。
更改两个绑定中的一个,你应该没问题。