ring icon indicating copy to clipboard operation
ring copied to clipboard

Automatic transfer-decoding of file content for multipart-params

Open dmichulke opened this issue 9 years ago • 2 comments

When receiving a file via multipart-params, there is an (optional) key "Content-Transfer-Encoding" with values 7bit (default), 8bit, binary and base64.

Depending on these values, the file or byte array (depending on the store used) should automatically be decoded to its original form.

Using Java7 or higher, one can use (.decode (java.util.Base64/getDecoder) bytes) to receive a new byte array with the real payload.

This is an issue because upon receiving the data, the multpart-params middleware has the "Content-Transfer-Encoding" parameters available to select the correct decoding mechanism. But since the Content-Transfer-Encoding value is not transmitted further down the line, the actual consumer of the file has to guess the real Content-Transfer-Encoding.

dmichulke avatar Sep 21 '16 13:09 dmichulke

As a current workaround for guessing whether the data is still base64 encoded I use

(if (every? #(<= (int \+) % (int \z)) (seq bytes))
    (.decode (Base64/getDecoder) bytes)
    bytes)

dmichulke avatar Sep 21 '16 13:09 dmichulke

In a related stack overflow post, there is a discussion as to whether this is a bug in the software (PHP in this case) or in the RFC:

http://stackoverflow.com/questions/5169434/content-transfer-encoding-in-file-uploading-request#5487532

dmichulke avatar Sep 23 '16 07:09 dmichulke