Heim  >  Fragen und Antworten  >  Hauptteil

node.js – Nodejs lädt große Dateien (Videos) mit [resumable.js + formidable] hoch

1. Anforderungen: Große Dateien [Video] hochladen, verarbeitet von Nodejs
2 BufferAufgetretene Probleme [Zum Hochladen einen Text als Beispiel verwenden]:

1. 后端写入成功后,无法打开文件【自动添加POST中相关的值】
   
X. Codeteil
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.Charles-Paketerfassungsdaten

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. Vom Server erhaltene Daten
Schreiben Sie den Inhalt der Datei
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.Das Problem

Der folgende Inhalt der auf der Serverseite gespeicherten Datei lautet: Bitte geben Sie den Code ein
11048576393393text/rtf393-rtf文本.rtf文本.rtf1
Dieser Inhalt ist das Zusammenfügen der Werte, die den URL-Parametern in POST entsprechen, was die Beurteilung und Segmentierung der Grenze im http-Protokoll darstellt.

Wenn Sie diesen Teil der Zeichen manuell löschen, kann die Datei geöffnet werden第一部分数据比前端提交的数据多了

Das Problem

POST中URL参数对应的值的拼接,也就是http协议中的boundary的判断分割。
如果手动删除该部分字符,文件是可以打开的1. Wie kann verhindert werden, dass dieses Attribut automatisch hinzugefügt wird?

2. Ist es möglich, diese Schreibmethode beim Hochladen großer Videos zu befolgen?

Wenn Sie Ideen haben, geben Sie mir bitte einen Rat, vielen Dank

过去多啦不再A梦过去多啦不再A梦2733 Tage vor1453

Antworte allen(1)Ich werde antworten

  • 黄舟

    黄舟2017-05-19 10:50:07

    有一文章比较适合你的一部分问题,你有必要看一下:纯js实现文件切片上传,断点续传,代码简单明了
    /a/11...

    Antwort
    0
  • StornierenAntwort