On Apr 18, 2017, at 9:01 AM, Zahir Lalani <ZahirLalani@oliver.agency> wrote: > > We are also looking into chunked uploads
For anything taking more than a couple of seconds or 2 GB (whichever comes first) you should indeed be using HTML5’s new File API to send chunks of the file individually rather than try to send it all at once. > we should be looking at the content range header or similar to prevent this No, you should be sending query parameters that identify which chunk number this is and how many more chunks there will be, so that the Dancer route handler you’re sending this to knows when it has received the last chunk. Dancer pseudocode: post ‘/upload’ => sub { my $chunkNumber = params ‘chunkNumber’; return { error => ‘no chunk number’ } unless isNaturalNumber($chunkNumber); my $chunkCount = params ‘chunkCount’; my $chunk = request->upload(‘chunk’); # Do something intelligent with $chunk* } HTML pseudocode: <input type=“file” onchange=“sendFile(this.files[0]”> jQuery pseudocode: function sendFile(file) { var chunkSize = X; // a base-2 “round” number suitable to your app var fileBytes = file.size; var numChunks = Math.floor(fileBytes / chunkSize + 1); function sendChunk() { var start, end; // calculated using available values var chunk = file.slice(start, end); var fd = new FormData(); fd.append(‘chunk', chunk); fd.append(‘chunkNumber', chunksSent); fd.append(‘chunkCount', chunksTotal); $.ajax(‘/upload’, { data: fd, success: function() { if (++chunksSent < numChunks) sendChunk(); }, }); } sendChunk(); } That will certainly not run as-is, but if it should be sufficient to get you to working code. _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users