将文件发送到其他服务器

时间:2020-09-29 07:58:37

标签: django django-rest-framework

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

我的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)

我的班级将请求数据发送到其他服务的网址:

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不是json serilizaable。如何将request.FILES发送到该服务器?

1 个答案:

答案 0 :(得分:1)

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

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