Conversation
`submitRequest` sent `files[0]` -- the file as it was dropped -- for a non-chunked binary upload, while the data that should go on the wire sat unused in `dataBlocks[0].data`. Anything `transformFile` produced was discarded, which silently includes `resizeWidth` and `resizeHeight`: the preview showed a resized image and the server received the full-size original. The chunked branch immediately above already used the chunk's own `dataBlock`, and form-data uploads append it too. `submitRequest` takes `dataBlocks` to reach it, optional so an existing caller passing three arguments keeps working. Its `formData` parameter is now `FormData | null`, which is what the binary path has always passed -- that was a `null as any` at the call site.
Contributor
Coverage Report
File Coverage
|
||||||||||||||||||||||||||||||||||||||
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Found while triaging #2238.
The bug
files[0]is the originalDropzoneFile. What should go on the wire is whatevertransformFilereturned, and it is sitting right there indataBlocks[0].data—submitRequestjust was not given it.So with
binaryBody: trueand no chunking,transformFileis silently discarded. That includesresizeWidthandresizeHeight, which are implemented throughtransformFile: the preview shows a resized image, the file list shows the resized dimensions, and the server receives the full-size original. No error, no warning.The two branches around it are both correct — the chunked one uses the chunk's own
dataBlock, and the form-data path appendsdataBlock.data— which is what makes this a gap rather than a design choice.This is the presigned-PUT-to-a-bucket path, i.e. precisely where people resize before uploading.
The fix
submitRequestnow takesdataBlocks. It is optional, so anything calling the method with three arguments keeps working and falls back to the old behaviour — there is nothing else it could send.While in the signature:
formDatais nowFormData | null, which is what the binary path has always passed it. That was anull as anyat the call site, andxhr.sendacceptsnullanyway, so the cast simply goes away.Tests
Two in
amazon-s3.js, which is where thebinaryBodycoverage lives:should send what transformFile produced, not the original file— againstmain:expected File{ status: 'uploading', …(6) } to be Blob{}.should send the file itself when there is nothing to transform— passes before and after. It is there to pin the default path, since the fallback means this is the branch most likely to be broken by a careless change later.