Hi, In your server code I think the variables list and length are not scoped to an individual request but are effectively global to all PUTs. So any concurrency in the PUT requests will result in interleaving. Maybe that's by design..?
On the client side, all the requests are started together. You might want to chain them one after another using callbacks and/or a control flow library like async. Charles. On 22 Jun 2013 17:30, "yu sun" <[email protected]> wrote: > I'm working on file uploading and want to chunk upload files to the > server, but when i combined the chunked files, the file hash changed(diff > from the orignal hash). There might be some mistakes. Please help. thx thx. > > There is a strange thing that if I upload the chunk file with chunk size > larger than 11.4% of the file size, will got the hash correctly. Im on > nodejs 0.10.6 now. > > *My client side code:* > function putFile(fileStat){ > putChunks(fileStat.totalChunkNumber); > function putChunks(totalChunkNumber){ > for(var i = 1; i <= totalChunkNumber; i++){ > putChunkFile(fileStat, i) > } > } > } > > function putChunkFile(fileStat, chunkNumber){ > > var filePath = fileStat.filePath; > var _start = (chunkNumber - 1) * CHUNK_SIZE; > var _end = _start + CHUNK_SIZE -1; > > if (_end >= fileStat.fileSize){ > _end = fileStat.fileSize; > } > > var req = createRequest("/testfiles", "PUT", > { > 'X-Chunk-Number': chunkNumber, > 'X-Chunk-Size': _end - _start + 1 > }); > > var sourceStream = fs.createReadStream(filePath, {start: _start, end: > _end}); > > sourceStream.on("open", function(){ > sourceStream.pipe(req); > }); > > sourceStream.on("end", function(){ > req.end(); > }); > } > > *Server side code:* > exports.put = function(req, res){ > var list = [] > var length = 0; > req.on("data", function(data){ > list.push(data); > length += data.length; > }).on("end",function(){ > var buffer = Buffer.concat(list, length); > fs.writeFile(path.join(getFilePath(), 'part' + > req.headers['x-chunk-number']), buffer, function(){ > res.status(200); > res.write('uploaded ' + req.headers['x-chunk-number']); > res.end(); > }); > }); > } > > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
