使用请求库将文件上载到Django PUT处理程序

2024-09-27 19:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个restput请求,用Django REST框架上传一个文件。每当我使用Postman REST客户端上载文件时,它都可以正常工作:

Postman configuration

但当我试图用我的代码来做这些时:

import requests
API_URL = "http://123.316.118.92:8888/api/"

API_TOKEN  = "1682b28041de357d81ea81db6a228c823ad52967"

URL = API_URL + 'configuration/configlet/31'
#files = {
files = {'file': open('configlet.txt','rb')}
print URL
print "Update Url ==-------------------"
headers = {'Content-Type' : 'text/plain','Authorization':API_TOKEN}
resp = requests.put(URL,files=files,headers = headers)
print resp.text
print resp.status_code

服务器端出现错误:

^{pr2}$

我将文件作为密钥传递,但仍有上述错误,请让我知道我在这里可能做错了什么。在

这就是我的Django服务器视图的外观

def put(self, request,id,format=None):
    configlet = self.get_object(id)
    configlet.config_path.delete(save=False)
    file_obj = request.FILES['file']
    configlet.config_path = file_obj
    file_content = file_obj.read()
    params = parse_file(file_content)
    configlet.parameters = json.dumps(params)
    logger.debug("File content: "+str(file_content))
    configlet.save()

Tags: 文件djangotokenrestapiobjurlfiles
1条回答
网友
1楼 · 发布于 2024-09-27 19:35:55

要使其工作,您需要发送一个multipart/form-data主体。您应该而不是在这里将整个请求的内容类型设置为text/plain;只设置一部分的mime类型:

files = {'file': ('configlet.txt', open('configlet.txt','rb'), 'text/plain')}
headers = {'Authorization': API_TOKEN}
resp = requests.put(URL, files=files, headers=headers)

这将把请求的Content-Type头作为一个整体设置到库中,并使用files将其设置为multipart/form-data。在

相关问题 更多 >

    热门问题