nodejs上传文件的处理(原生)

按照网上的教程贴(罕见原生),做了个上传文件的处理,有些不太明白的地方想请教一下。

可否帮我写一下注释,让我明白每一段的意思,作用。

            console.log("传入文件:处理chunk");

            var chunks = [];
            var bufferconcat;
            req.on("data",function(chunk){
                chunks.push(chunk);
                size = chunk.length;

            });
            var newArray=[];
            req.on("end",function(){
                bufferconcat = Buffer.concat(chunks,size);//由这里开始不太明白,是怎么处理的二进制,怎么筛选出来的头信息还有去掉头尾。
                console.log(bufferconcat);
                for(var a = 0;a<bufferconcat.length;a++){
                    if(bufferconcat[a].toString() == 13 && bufferconcat[a+1].toString() == 10){
                    
                        newArray.push(a);
                    }
                    
                }

                var name = bufferconcat.slice(newArray[0],newArray[1]).toString().split(";")[2].split("=")[1];
                var filename = name.split("\"");
                console.log(filename);

//这下面的newArray[3]+2 其中+2是什么意思?

                var data = bufferconcat.slice(newArray[3]+2,newArray[newArray.length-2]);
                    fs.writeFileSync("./"+filename[1] , data);
            });
阅读 5.5k
3 个回答

加2是为了得到真正的内容,只是特别的偏移量而已,需要看具体下载的内容

新手上路,请多包涵

**--b9cf2bba-0142-4590-b5b0-72e6851846d5
Content-Disposition: form-data; name="file"; filename="1514887565294.jpg"
Content-Type: image/png; charset=utf-8
图片文件流
--b9cf2bba-0142-4590-b5b0-72e6851846d5--**
这是接收到的一般符合图片格式的。

newArray[3]+2 是因为newArray.push(a); 此时a位置是回车键的的第一个码所在的位置,因此真正的图片buffer流 bufferconcat.slice(newArray[3]+2,newArray[newArray.length-2]);

bufferconcat = Buffer.concat(chunks,size);//由这里开始不太明白,是怎么处理的二进制,怎么筛选出来的头信息还有去掉头尾。
console.log(bufferconcat);
-->这个地方,就是使用Buffer.concat()生成一个buffer
这个buffer包括什么信息,console.log()打印出来看看就知道了。

后面的操作就是从中获取文件名罢了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏