playwright-python icon indicating copy to clipboard operation
playwright-python copied to clipboard

[Bug]: APIRequestContext multipart parameter does not allow user to send multiple files in a single field

Open adriangardiner-taina opened this issue 9 months ago • 3 comments

Version

1.50.0

Steps to reproduce

Setup a multipart data object with an array of files being sent in a single field using the ApiRequestContext object

multipart_data = {
    files= [ 
        { "name"="Document1.txt", "mimeType":"text/plain", buffer: b"Text file 1 content" },
        { "name"="Document2.txt", "mimeType":"text/plain", buffer: b"Text file 2 content" }
    ]
}

Attempt to send this to an API endpoint that expects to find a list of files against the field named "files".

Example steps : TBC

Expected behavior

I expect to receive a list of files in my API endpoint in a single form field.

Actual behavior

0 files are sent to the API Endpoint.

Additional context

Issue has been identified in playwright/_impl/_fetch.py#L382

Suggest an extra helper method and foreach loop added to identify and attach arrays of file payloads

Environment

- Operating System: [Windows 10]
- CPU: [Intel i7]
- Browser: [All]
- Python Version: [3.11.6]
- Other info:

adriangardiner-taina avatar Mar 11 '25 10:03 adriangardiner-taina

I have a suggested fix for this which I have already used locally -

Pull Request: (https://github.com/microsoft/playwright-python/pull/2778)

adriangardiner-taina avatar Mar 11 '25 10:03 adriangardiner-taina

Looks like also something which would affect upstream, I'll move it for now until we have decided how we want to move forward on this. Once we decided how to fix it all the language bindings would consume the same fix.

mxschmitt avatar Mar 12 '25 09:03 mxschmitt

This is a duplicate of microsoft/playwright#28070 that has been fixed in Node.js by microsoft/playwright#30489 by accepting FormData objects. In requests, you can pass a list of tuples in this case.

dgozman avatar Mar 17 '25 11:03 dgozman