Как отправить видео через XMLhttprequest и в виде содержимого тела в виде нескольких частей / форм? Видео не отправлено? - PullRequest
0 голосов
/ 30 января 2020

У меня есть веб-страница. Я пытаюсь разрешить отправку видео в мой API через XMLhttprequest, как показано ниже:

   <form onsubmit="submitBtn()"> 
   <input type="file" accept="video/*" name="fileupload" value="fileupload" id="fileupload"> 
   <label for="fileupload"> Select a file to upload
   </label> 
   <input type="submit" value="submit">
   </form>

<script language="javascript" type="text/javascript">
  function submitBtn() {
    var search = document.getElementById('fileupload').value;
    if (search.length>0){
        var text = search;
userAction(text);
    } 
  }
</script>

<script language="javascript" type="text/javascript">
  function userAction(res) {
      var formData = new FormData();
      formData.append("video", res);
    var request = new XMLHttpRequest();
    var api = 'myApi'
    request.open('POST', api, true);
    request.onload = function () {
      // Begin accessing JSON data here
      var data = this.response;
      if (request.status >= 200 && request.status < 400) {
           console.log('celebrate');
      } else {
        console.log('error');
      }
    }
    request.send(formData);
}

</script>

Эта часть работает нормально, однако я не верю, что видео сам отправляется в мой API. Если я context.log(result.body) получаю что-то похожее на:

------WebKitFormBoundary1234
Content-Disposition: form-data; name="video"

C:\fakepath\videoname.mp4
------WebKitFormBoundaryq1234--

Я буду sh, чтобы затем отправить это видео другому API в качестве содержимого тела для нескольких частей / форм.

Я попытался это используя:

function videoAPI (context, auth, vid, callback){
    var body = vid;

    var requestUrl = urlApi;
    const requestOptions = {
        hostname: requestUrl.hostname,
        path: requestUrl.path,
        method: 'POST',
        headers: {
            'Content-Type': 'multipart/form-data',
        }
    };

    var request = https.request(requestOptions, function(res) {
        var data = "";
        res.on('data', function (chunk) {
            context.log('Response: ' + chunk);
            data += chunk;
        });
        res.on('end', function () {
            var jsonData = JSON.parse(data);
callback(jsonData);         

        });        
    })
    request.write(body);
    request.end();    
}

Опять же, эта функция, однако, я получаю ответ:

Input is invalid. Input must specify either a video url, an asset id or provide a multipart content body

Похоже, что я либо отправляю видео неправильно, либо я не отправляю его правильно через XMLhttprequest.

Может кто-нибудь подсказать, где я ошибся и как это исправить, пожалуйста?

Я использую nodejs и Azure.

...