【问题标题】:Send file to a different server将文件发送到不同的服务器
【发布时间】:2020-09-29 17:10:14
【问题描述】:

我的后端有一个上传网址,我想在另一台服务器上上传一个文件。

我的 API 视图:

  class AssessmentFileUpload(APIView):
    parser_classes = (MultiPartParser, )

    def post(self, request, format=None):
        tenant = request.user.tenant.id

        response = AssessmentFileUploadHelper(tenant).upload_file(request.FILES)
        response_text = json.loads(response.text)
        print(response_text)
        if response.status_code == status.HTTP_201_CREATED:
            return Response({"message": "success", "id": response_text.get('id')}, status=status.HTTP_201_CREATED)
        return Response({"message": "failed"}, status=status.HTTP_400_BAD_REQUEST)

我的类将请求数据发送到另一个服务器的 url:

class AssessmentFileUploadHelper:
    def __init__(self, tenant_id):
        self.tenant_id = tenant_id

    
    def upload_file(self, file):
        print("FILE IS", file)
        url = settings.ASSESSMENT_CONNECTION_SETTINGS["api_endpoint"] + "tenant/" + \
        str(self.tenant_id) + "/fileupload/"
        return RequestSender().send_request(url,None, file)

class RequestSender:
    def __init__(self):
        super().__init__()

    def __get_authorized_header(self):
        usernamepassword = settings.ASSESSMENT_CONNECTION_SETTINGS["userid"] + ":" + settings.ASSESSMENT_CONNECTION_SETTINGS["password"]
        userAndPass = b64encode(usernamepassword.encode("utf-8")).decode("ascii")
        authorization = "Basic " + userAndPass
        headers = {'Authorization': authorization, "Content-Type": "application/json"}
        return headers

    def send_request(self, url, data, files=None):
        json_data = json.dumps(data)
        response = requests.post(url,
                                 data=json_data,
                                 headers=self.__get_authorized_header(),
                                 files=files
                                 )
        return response

现在,我得到的错误是 InMemoryUploadedFile is not json serilizaable 。如何将 request.FILES 发送到该服务器?

【问题讨论】:

  • 你能写出print(response.text)的输出吗?该值似乎不是有效的 json 结构。
  • 响应不存在,因为它抛出错误
  • 你提到的同样的错误? print(response) 的值怎么样?
  • 我会更新我的问题
  • 知道了。尝试查看request 变量(post 函数)中写入的内容。

标签: django django-rest-framework


【解决方案1】:

您需要将 'InMemoryUploadedFile' 类型转换为字符串:

str = request.FILES['file'].read().decode()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2016-06-06
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多