设为首页 收藏本站
查看: 1454|回复: 0

[经验分享] 使用SAS和JavaScript前端上传Azure Bolb大文件

[复制链接]

尚未签到

发表于 2017-6-30 13:11:19 | 显示全部楼层 |阅读模式
<!DOCTYPE html>  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <title>File Uploader</title>
  <script src="http://code.jquery.com/jquery-1.4.1.js"></script>

  <link>  <script>
  var maxBlockSize = 256 * 1024;//Each file will be split in 256 KB.
  var numberOfBlocks = 1;
  var selectedFile = null;
  var currentFilePointer = 0;
  var totalBytesRemaining = 0;
  var blockIds = new Array();
  var blockIdPrefix = "block-";
  var submitUri = null;
  var bytesUploaded = 0;
  $(document).ready(function () {
  $("#output").hide();
  $("#file").bind('change', handleFileSelect);
  if (window.File && window.FileReader && window.FileList && window.Blob) {
  // Great success! All the File APIs are supported.
  } else {
  alert('The File APIs are not fully supported in this browser.');
  }
  });
  //Read the file and find out how many blocks we would need to split it.
  function handleFileSelect(e) {
  maxBlockSize = 256 * 1024;
  currentFilePointer = 0;
  totalBytesRemaining = 0;
  var files = e.target.files;
  selectedFile = files[0];
  $("#output").show();
  $("#fileName").text(selectedFile.name);
  $("#fileSize").text(selectedFile.size);
  $("#fileType").text(selectedFile.type);
  var fileSize = selectedFile.size;
  if (fileSize < maxBlockSize) {
  maxBlockSize = fileSize;

  console.log("max block>  }
  totalBytesRemaining = fileSize;
  if (fileSize % maxBlockSize == 0) {
  numberOfBlocks = fileSize / maxBlockSize;
  } else {
  numberOfBlocks = parseInt(fileSize / maxBlockSize, 10) + 1;
  }
  console.log("total blocks = " + numberOfBlocks);
  var baseUrl = $("#sasUrl").val();
  var indexOfQueryStart = baseUrl.indexOf("?");
  submitUri = baseUrl.substring(0, indexOfQueryStart) + '/' + selectedFile.name + baseUrl.substring(indexOfQueryStart);
  console.log(submitUri);
  }
  var reader = new FileReader();
  reader.onloadend = function (evt) {
  if (evt.target.readyState == FileReader.DONE) { // DONE == 2
  var uri = submitUri + '&comp=block&blockid=' + blockIds[blockIds.length - 1];
  var requestData = new Uint8Array(evt.target.result);
  $.ajax({
  url: uri,
  type: "PUT",
  data: requestData,
  processData: false,
  beforeSend: function (xhr) {
  xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
  xhr.setRequestHeader('Content-Length', requestData.length);
  },
  success: function (data, status) {
  console.log(data);
  console.log(status);
  bytesUploaded += requestData.length;
  var percentComplete = ((parseFloat(bytesUploaded) / parseFloat(selectedFile.size)) * 100).toFixed(2);
  $("#fileUploadProgress").text(percentComplete + " %");
  uploadFileInBlocks();
  },
  error: function (xhr, desc, err) {
  console.log(desc);
  console.log(err);
  }
  });
  }
  };
  function uploadFileInBlocks() {
  if (totalBytesRemaining > 0) {
  console.log("current file pointer = " + currentFilePointer + " bytes read = " + maxBlockSize);
  var fileContent = selectedFile.slice(currentFilePointer, currentFilePointer + maxBlockSize);
  var blockId = blockIdPrefix + pad(blockIds.length, 6);

  console.log("block>  blockIds.push(btoa(blockId));
  reader.readAsArrayBuffer(fileContent);
  currentFilePointer += maxBlockSize;
  totalBytesRemaining -= maxBlockSize;
  if (totalBytesRemaining < maxBlockSize) {
  maxBlockSize = totalBytesRemaining;
  }
  } else {
  commitBlockList();
  }
  }
  function commitBlockList() {
  var uri = submitUri + '&comp=blocklist';
  console.log(uri);
  var requestBody = '<?xml version="1.0" encoding="utf-8"?><BlockList>';
  for (var i = 0; i < blockIds.length; i++) {
  requestBody += '<Latest>' + blockIds + '</Latest>';
  }
  requestBody += '</BlockList>';
  console.log(requestBody);
  $.ajax({
  url: uri,
  type: "PUT",
  data: requestBody,
  beforeSend: function (xhr) {
  xhr.setRequestHeader('x-ms-blob-content-type', selectedFile.type);
  xhr.setRequestHeader('Content-Length', requestBody.length);
  //xhr.setRequestHeader('x-ms-blob-content-md5', "OcEHvHuHGvmhdZ5vBtxx0Q=="); //设置组合后的blob的md5值,并不会做校验
  },
  success: function (data, status) {
  console.log(data);
  console.log(status);
  },
  error: function (xhr, desc, err) {
  console.log(desc);
  console.log(err);
  }
  });
  }
  function pad(number, length) {
  var str = '' + number;
  while (str.length < length) {
  str = '0' + str;
  }
  return str;
  }
  </script>
  </head>
  <body>
  <form>
  <div>
  <h1>File Uploader</h1>
  <p>
  <strong>SAS URI</strong>:
  <br />
  <span>
  <input type="text"
  value="" />
  </span>
  </p>
  <p>
  <strong>File To Upload</strong>:
  <br />
  <span>
  <input type="file" name="file" />
  </span>
  </p>
  <div>
  <strong>File Properties:</strong>
  <br />
  <p>
  Name: <span></span>
  </p>
  <p>

  File>  </p>
  <p>
  File Type: <span></span>
  </p>
  <p>
  <input type="button" value="Upload File" />
  </p>
  <p>
  <strong>Progress</strong>: <span>0.00 %</span>
  </p>
  </div>
  </div>
  <div>
  </div>
  </form>
  </body>
  </html>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389663-1-1.html 上篇帖子: 通过PowerShell命令给Azure VM添加CustomScriptExtension 下篇帖子: Azure IoT 技术研究系列4-Azure IoT Hub的配额及缩放级别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表