上云无忧 > 文档中心 > 百度智能云对象存储BOS在浏览器中直接上传文件到BOS的原理
对象存储BOS
百度智能云对象存储BOS在浏览器中直接上传文件到BOS的原理

文档简介:
如您不使用 bce-bos-uploader ,可以参考下面的内容完成如何在浏览器中直接上传文件到 BOS 。使用流程: 开启 Bucket 的跨域访问设置; 查询 ak/sk; 初始化 BosClient; 处理上传逻辑。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

原理篇一:在浏览器中直接上传文件到BOS

如您不使用 bce-bos-uploader ,可以参考下面的内容完成如何在浏览器中直接上传文件到 BOS 。使用流程:

  1. 开启 Bucket 的跨域访问设置
  2. 查询 ak/sk
  3. 初始化 BosClient
  4. 处理上传逻辑

开启 Bucket 的跨域访问

受浏览器安全限制,如果想直接在浏览器中访问 BOS 服务,必须正确设置好相关 bucket 的跨域功能。设置方法请参考开启 Bucket 的跨域访问。

初始化设置

var bosConfig = {
    credentials: {
         ak: '从百度智能云控制台查询您的ak',
         sk: '从百度智能云控制台查询上面这个ak所对应的sk'
     },
     endpoint: 'http://bj.bcebos.com' // 根据您选用bos服务的区域配置相应的endpoint
 };
 var bucket = 'bce-javascript-sdk-demo-test'; // 设置您想要操作的bucket
 var client = new baidubce.sdk.BosClient(bosConfig);

后续我们可以使用 client 这个实例来进行 BOS 相关操作。

上传逻辑

我们可以通过调用 client.putObjectFromBlob(bucket, key, blob, options) 来完成文件的上传操作。

这个函数支持4个参数,其中 options 是可选的。如果需要手工设置文件的的 Content-Type,可以放到 options 参数里面。 如果没有手工设置,默认的 Content-Type 是 application/oceat-stream 。 另外,可以通过调用 baidubce.sdk.MimeType.guess(ext) 来根据后缀名得到一些常用的 Content-Type 。

注意:因为 Firefox 兼容性的一个问题,如果上传的文件是 text/* 类型,Firefox 会自动添加 charset=utf-8 因此我们给 options 设置 Content-Type 的时候,需要手工加上 charset=utf-8,否则会导致浏览器计算的签名跟服务器计算的签名不一致,导致上传失败。

// 监听文件上传的事件,假设页面中有:<input type="file" id="upload" /> $('#upload').on('change', function (evt) {
     var file = evt.target.files[0]; // 获取要上传的文件
     var key = file.name; // 保存到bos时的key,您可更改,默认以文件名作为key
     var blob = file;

     var ext = key.split(/\./g).pop();
     var mimeType = baidubce.sdk.MimeType.guess(ext);
     if (/^text\//.test(mimeType)) {
         mimeType += '; charset=UTF-8';
     }
     var options = {
         'Content-Type': mimeType
     };

      client.putObjectFromBlob(bucket, key, blob, options)
         .then(function (res) {
             // 上传完成,添加您的代码
             console.log('上传成功');
         })
         .catch(function (err) {
             // 上传失败,添加您的代码
             console.error(err);
         });
  });

如果想获悉当前上传的进度,可以监听 progress 事件。

client.on('progress', function (evt)
 {
     // 监听上传进度
     if (evt.lengthComputable)
 {
         // 添加您的代码
         var percentage = (evt.loaded / evt.total) * 100;
         console.log('上传中,已上传了' + percentage + '%');
     }
 });
相似文档
  • 用户在使用浏览器上传文件到 BOS 的时候,如果遇到文件过大,需要先将文件分块然后再上传。上传过程中有可能会遇到页面关闭、浏览器崩溃、网络连接中断等问题,从而导致上传失败。BOS 支持分块上传和断点续传功能。分块上传请参见“ Object 的分块上传”,下面介绍“断点续传”的实现方法。
  • Bce-bos-uploader 支持 STS(Security Token Service) 临时授权的方式。服务端生成一组具体特定操作权限、具有一定时效性的临时 AK/SK ,这组临时的 AK/SK 可以暴露给浏览器端直接使用。用户只需要将服务端返回的 AK/SK 及 SessionToken 设置为 bce-bos-uploader 对应的 bos-ak、bos-sk 和 uptoken 参数。
  • 移动互联时代手机上传数据的场景随处可见,为了方便开发者聚焦于产品的业务逻辑,用户可以直接将文件存储到 BOS 上。 BOS 产品基于 STS 授权方式为用户提供了安全的上传和下载方式, BOS 还支持图片处理服务。BOS 具有成本低、支持海量存储和弹性扩展的特性,能帮助开发者更方便实现移动 APP 业务的开发。
  • 下载完 APP 并安装完成后可以直接通过应用服务器地址访问 BOS ,并进行图片处理。应用服务器地址是指搭建移动应用的后台服务器,默认开启的端口为8080。关于 BOS 的区域和 Bucket 设置都需要在应用服务器进行配置。
  • 上传图片到 BOS 过程中 APP、APP Server 和 BOS 的交互过程如下图所示: APP 上传图片时向 APP Server 发送获取上传方式请求。 APP Server 向 STS 服务器请求 BOS 使用 STS 访问的 AK/SK。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部