首页 > 解决方案 > 如何通过 XMLhttprequest 和多部分/表单正文内容发送视频?视频未发送?

问题描述

我有一个网页,我试图允许通过 XMLhttprequest 将视频发送到我的 API,如下所示:

   <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--

然后我希望将此视频作为多部分/表单正文内容发送到另一个 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。

标签: javascriptnode.jsazurexmlhttprequestmicrosoft-cognitive

解决方案


推荐阅读