我正在尝试通过API以编程方式将文本附加到文件中。
这是我的代码:
def updateFile(fileId):
headers = {
'Content-Type': 'application/json',
'token': token
}
url = 'https://example.com/api/file/' + str(fileId) + '/upload'
te = """
this
is
text
sdfs
"""
te= json.dumps(te)
return requests.put(url, headers=headers, data=te)
r = updateFile(id)
print r.json()
这是有效的,但是当我下载文件时,我有一些像这样的字符串:
"\n this\n is\n text\n sdfs\n "
如您所见,所有文字都在同一行(\n
未正确解释),"
仍然存在。
我可以做错什么?
答案 0 :(得分:2)
<强>更新强>
发送原始文件内容而不对其进行JSON编码,但不指定Content-Type: application/json
。
通过设置该标头,您告诉服务器请求的主体将采用JSON格式,如果您按原样上传文件,则不会。服务器期待JSON,但是当它没有获得JSON数据时却不满意。相反,如果您使用该标头发送JSON数据,服务器会接受数据并将其写入文件而不对其进行解码。
您可能需要设置内容类型。假设纯文本文件可以使用text/plain
。
如果您查看json.dumps()
的结果:
import json
te = """
this
is
text
sdfs
"""
>>> json.dumps(te)
'"\\n this\\n is\\n text\\n sdfs\\n "'
您会看到新行被转义以便保留它们。这就是他们出现在你的文件中的原因。如果您不希望它们存在于您的文件中,则不要将该字符串视为JSON数据,只需按原样上传即可。
顺便说一句,如果您使用json
参数而不是data
参数,则可以避免自行转换为JSON的麻烦:
# do not manually convert to JSON, use json parameter instead
return requests.put(url, headers=headers, json=te)