Hi @Charles Care, Thanks for your comment, I want to implement one resumable file upload system that support concurrency uploading.
Emm, i've checked with the variables on the server side, variables are scoped to each request. So concurrency on the server works fine. To the client side, i tried chaining them one by one, but sadly i got the same test result, the correct only be got when the chunk size > 11.4%*filesize. Or if you have any other resumable file uploading design? Im really new to this ^ ^. On Sunday, June 23, 2013 1:03:32 AM UTC+8, Charles Care wrote: > > 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] <javascript:>> 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]<javascript:> >> To unsubscribe from this group, send email to >> [email protected] <javascript:> >> 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] <javascript:>. >> 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.
