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)