Context: Trying to upload a file to a web application
Let's assume I'm only using the basic options:
HTTP Request Sampler:
Method: Post
Protocol: http
Path: /api/file/upload
Follow Redirects: checked
Use Keep-Alive: checked
Use multipart/form-data: checked
Files Upload:
File Path: C:\Users\etc...etc
Parameter Name: file
MIME: image/jpeg
Cookies are set with Cookie Manager, Login is also set.
Uploading small files (130KB) works fine like this, Bigger files throw an error 500: "Cannot delete temporary file chunk."
On-website upload works fine and uses resumable.js (which is also the one throwing this error I assume)
I am assuming this is due to chunking, since that's basically the only major difference between what I have tried. Does anyone have any insight on this?
Edit: Using the image photoGood that is "chunked"/split in 2 blocks I can also form POSTs with these parameters:
resumableIdentifier 20702285-photoGoodjpg
resumableFilename photoGood.jpg
resumableType image/jpeg
resumableRelativePath photoGood.jpg
resumableChunkSize 1048576
resumableChunkNumber 1
resumableTotalChunks 2
resumableTotalSize 1859876
resumableChunkSize 887520
However, only the ChunkNumber 1 will be used, as in, the chunks are not joined together on the server.
I think your request is missing some mandatory parameters like:
Check out documentation at http://www.resumablejs.com/ website for more details.
If you're able to successfully perform upload using browser you should be able to record the associated request(s) using JMeter's HTTP(S) Test Script Recorder, just make sure to copy your PDF file to "bin" folder of your JMeter installation before uploading the file and JMeter will generate the relevant HTTP Request sampler(s) under the Recording Controller.
Check out Recording File Uploads with JMeter article for more details.
It would also be good to capture the traffic from JMeter and the real browser using a 3rd-party sniffer tool like Fiddler or Wireshark, this way you will be able to identify the differences. Once you configure JMeter to send the same requests as the real browser - the whole transaction will be successful.