在下载过程中添加字节。与blob的Javascript

时间:2017-10-18 01:28:35

标签: javascript file download blob

我尝试从Javascript下载文件。我的代码只是一个原型,但需要验证这个概念。我的服务器有62个文件(512K)。

是否可以开始下载文件,并将字节附加到当前下载文件进程。

所以我声明一个函数“上传”文件索引(i)。此函数将使用jquery延迟。

var up = function (i) {

          //http://localhost/Handler/ReadFileTob64.ashx?index=0
          jQuery.ajax({
            url: "/Handler/ReadFileTob64.ashx?index=" + i,
            type: "POST"
          }).done(function (data) {

            // var b =  System.Convert.FromBase64String(data);
            blob = b64toBlob(data, "video/mp4", 512, blob);
            if (i < 61) {

              up(i+1);
            } else {
              dfd.resolve();
            }

          }).fail(function (ex) {
            alert(ex);
          });
      }

我保证我的功能,当它完成时,我创建了一个下载它的链接。

dfd.promise(up);
      up(0);

      up.done().then(function () {

            var url = URL.createObjectURL(blob);

            var a = document.createElement('a');
            a.download = "video.mp4";
            a.href = url;
            a.textContent = "video";

            document.getElementById('content').appendChild(a);


      });



    })

实际上在这个方法中我加载blob中的所有字节(62个文件),所以我假设这些字节将存储在浏览器的内存中。

是否可以开始下载博客,并在下载过程中附加字节数?

我的完整代码.....

jQuery(document).ready(function () {



      var fileType = "video/mp4";
      var blob = new Blob([], { type: fileType });
      var dfd = jQuery.Deferred();
      var up = function (i) {

          //http://localhost/Handler/ReadFileTob64.ashx?index=0
          jQuery.ajax({
            url: "/Handler/ReadFileTob64.ashx?index=" + i,
            type: "POST"
          }).done(function (data) {

            // var b =  System.Convert.FromBase64String(data);
            blob = b64toBlob(data, "video/mp4", 512, blob);
            if (i < 61) {

              up(i+1);
            } else {
              dfd.resolve();
            }

          }).fail(function (ex) {
            alert(ex);
          });
      }


      dfd.promise(up);
      up(0);

      up.done().then(function () {

            var url = URL.createObjectURL(blob);

            var a = document.createElement('a');
            a.download = "video.mp4";
            a.href = url;
            a.textContent = "video";

            document.getElementById('content').appendChild(a);


      });



    })


    function b64toBlob(b64Data, contentType, sliceSize, blob) {
      contentType = contentType || '';
      sliceSize = sliceSize || 512;

      var byteCharacters = atob(b64Data);
      var byteArrays = [];
      byteArrays.push(blob);
      for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        var slice = byteCharacters.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
          byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
      }

      blob = new Blob(byteArrays, { type: contentType });
      return blob;
    }

0 个答案:

没有答案