1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Python] Django - post InMemoryUploadedFile to external REST api

Discussão em 'Python' iniciado por Stack, Outubro 7, 2024.

  1. Stack

    Stack Membro Participativo

    In the Django Rest Framework I would like to post a file, received as an InMemoryUploadedFile, to a different server as soon as it is received.

    It sounds simple, but the request.post() function does not seem to properly send over such a file :

    def post(self, request, *args, **kwargs):
    data = request.data
    print(data)
    # <QueryDict: {'file': [<InMemoryUploadedFile: myfile.pdf (application/pdf)>]}>
    endpoint = OTHER_API_URL + "/endpoint"
    r = requests.post(endpoint, files=data)


    My other server receives the request (through flask) with the name of the file, but not the content:

    @app.route("/endpoint", methods=["POST"])
    def endpoint():
    if flask.request.method == "POST":
    # I removed the many checks to simplify the code
    file = flask.request.files['file']
    path = os.path.join(UPLOAD_FOLDER, file.filename)
    file.save(path)

    print(file) #<FileStorage: u'file.pdf' (None)>
    print(os.path.getsize(path)) #0

    return [{"response":"ok"}]


    When posting a file directly to that api in form-data with postman, It works as expected:

    print(file) # <FileStorage: u'file.pdf' ('application/pdf')>
    print(os.path.getsize(path)) #8541


    Any help on how to fix this, i.e. transform the InMemoryUploadedFile type in something a normal REST api can understand? Or maybe just adding the right headers?

    Continue reading...

Compartilhe esta Página