node.js - Nodejs memuat naik fail besar (video) menggunakan [resumable.js + formidable]
过去多啦不再A梦
过去多啦不再A梦 2017-05-19 10:48:07
0
1
1387

1. Keperluan: Muat naik fail besar [video] dan proseskannya dengan Nodejs
2 bahagian hadapan boleh digunakan semula untuk menghiris dan memuat naik video, dan bahagian belakang boleh diproses Buffer

.
Masalah yang dihadapi [Gunakan teks sebagai contoh untuk memuat naik]:
1. 后端写入成功后,无法打开文件【自动添加POST中相关的值】
   
X bahagian kod

1.app.js

app.post('/upload', function(req, res){
      var form = new formidable.IncomingForm();
      //后缀名
      form.keepExtensions = true;
      //保存路径
      form.uploadDir = './';
      form.parse(req, function(err, fields, files) {
          //console.log(util.inspect({fields: fields, files: files}));
      });


      var dd=[],ll=0;
      form.handlePart=function(part) {
        var dd=[],ll=0;
        //Buffer加入数组
        part.on('data', function(data) {
          if (data.length == 0) {
            return;
          }
          dd.push(data);
          ll+=data.length;
        });

        part.on('end', function() {
        //获取文件名
          var p = './' + req.query.resumableFilename;
            fs.open(p, 'a', function (err, fd) {
              if (err) {
                throw err;
              }
          var writeBuffer = dd,
              offset = 0,
              len = writeBuffer.length,
              filePostion = null;
              //写人Buffer
              fs.write(fd, Buffer.concat(dd, ll), 0, ll, filePostion, function(){

              })
            });
        });
      }
});

2.Data tangkapan paket Charles
POST /upload?resumableChunkNumber=1&resumableChunkSize=1048576&resumableCurrentChunkSize=393&resumableTotalSize=393&resumableType=text%2Frtf&resumableIdentifier=393-rtf&resumableFilename=%E6%96%87%E6%9C%AC.rtf&resumableRelativePath=%E6%96%87%E6%9C%AC.rtf&resumableTotalChunks=1 HTTP/1.1
Host: 127.0.0.1:4000
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="file"; filename="文本.rtf"
Content-Type: application/octet-stream

------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableChunkNumber"

1
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableChunkSize"

1048576
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableCurrentChunkSize"

393
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableTotalSize"

393
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableType"

text/rtf
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableIdentifier"

393-rtf
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableFilename"

文本.rtf
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableRelativePath"

文本.rtf
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="resumableTotalChunks"

1
------WebKitFormBoundaryeLW6trgJbBaZlvgP
Content-Disposition: form-data; name="file"; filename="文本.rtf"
Content-Type: application/octet-stream
{\rtf1\ansi\ansicpg936\cocoartf1504
{\fonttbl\f0\fnil\fcharset134 PingFangSC-Regular;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;\csgray\c100000;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 \'c4\'e3\'ba\'c3}
------WebKitFormBoundaryeLW6trgJbBaZlvgP--
3. Data diperolehi oleh pelayan
Tulis kandungan fail

11048576393393text/rtf393-rtf文本.rtf文本.rtf1{\rtf1\ansi\ansicpg936\cocoartf1504
{\fonttbl\f0\fnil\fcharset134 PingFangSC-Regular;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;\csgray\c100000;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 \'c4\'e3\'ba\'c3}

4.Masalahnya
Kandungan fail berikut yang disimpan di sebelah pelayan adalah sila masukkan kod

11048576393393text/rtf393-rtf文本.rtf文本.rtf1
第一部分数据比前端提交的数据多了Kandungan ini ialah penyambungan nilai yang sepadan dengan parameter URL dalam POST, yang merupakan pertimbangan dan pembahagian sempadan dalam protokol http.

Jika anda memadamkan bahagian aksara ini secara manual, fail boleh dibuka

POST中URL参数对应的值的拼接,也就是http协议中的boundary的判断分割。
如果手动删除该部分字符,文件是可以打开的Masalahnya

1. Bagaimana untuk menghalangnya daripada menambahkan atribut ini secara automatik?

2. Adakah mungkin untuk mengikuti kaedah penulisan ini apabila memuat naik video besar?

1.如何不让它自动添加该属性?
2.上传大视频是否可以参照这样的写法?Jika anda mempunyai sebarang idea, sila berikan saya nasihat, terima kasih banyak-banyak

过去多啦不再A梦
过去多啦不再A梦

membalas semua(1)
黄舟

Ada artikel yang lebih sesuai untuk beberapa masalah anda anda perlu membacanya: Pure js melaksanakan muat naik penghirisan fail, muat naik resume titik putus, kodnya mudah dan jelas
/a/11...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!