Python : API,编辑的文件格式不正确
Python : API, edited file is not formatted correctly
我正在尝试通过 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
未正确解释),"
仍然存在。
我做错了什么?
更新
发送未经 JSON 编码的原始文件内容,但不指定 Content-Type: application/json
.
通过设置 header,您告诉服务器请求的 body 将采用 JSON 格式,如果您按原样上传文件,它将不是。服务器期望 JSON 但在未获得 JSON 数据时不高兴。相反,如果您发送带有 header 的 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)
我正在尝试通过 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
未正确解释),"
仍然存在。
我做错了什么?
更新
发送未经 JSON 编码的原始文件内容,但不指定 Content-Type: application/json
.
通过设置 header,您告诉服务器请求的 body 将采用 JSON 格式,如果您按原样上传文件,它将不是。服务器期望 JSON 但在未获得 JSON 数据时不高兴。相反,如果您发送带有 header 的 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)