Python:API,编辑的文件格式不正确

时间:2017-09-18 11:08:50

标签: python api put

我正在尝试通过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未正确解释),"仍然存在。

我可以做错什么?

1 个答案:

答案 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)