前端js华为云obs上传下载文件与进度条的设置

前端js华为云obs上传下载文件与进度条的设置

首先下载OBS BrowserJS SDK安装包
用git将代码拉到本地

git clone https://github.com/huaweicloud/huaweicloud-sdk-browserjs-obs.git

下载到本地安装依赖

npm install

安装依赖完成后可以看到其中包含examples文件夹(示例代码),dist文件夹(SDK库文件)。在所需要用的页面中引入dist/@cloud/esdk-obs-browserjs-without-polyfill-3.21.8.min.js该文件(不限版本)

<script src='./esdk-obs-browserjs-without-polyfill-3.21.8.min.js'></script>

vue项目中可这样引入,将文件放入指定位置

import ObsClient from "@/assets/js/esdk-obs-browserjs-without-polyfill-3.21.8.min.js"

然后就可以进行华为云OBS对象存储服务了

创建ObsClient实例
var obsClient = new ObsClient({
 access_key_id: '*** Provide your Access Key ***', 
 secret_access_key: '*** Provide your Secret Key ***', 
 server : 'https://your-endpoint'
 timeout: 3000, // 设置超时时间
});
文本上传

文本上传用于直接上传字符串。

obsClient.putObject({
 Bucket : 'bucketname',
 Key : 'objectname',
 Body : 'Hello OBS'
}, function (err, result) {
 if(err){
 console.error('Error-->' + err);
 }else{
 console.log('Status-->' + result.CommonMsg.Status);
 }

将指定待上传的字符串放入Body参数。

文件上传

文件上传使用本地文件作为对象的数据源。

obsClient.putObject({
 Bucket : 'bucketname',
 Key : 'objectname',
 SourceFile : document.getElementById('input-file').files[0]
}, function (err, result) {
 if(err){
 console.error('Error-->' + err);
 }else{
 console.log('Status-->' + result.CommonMsg.Status);
 }
});

SourceFile:指定待上传的文件,必需是File对象或者Blob对象。
SourceFile和Body不可同时使用。
上传的内容不可超过5GB

获取上传进度

文件过大时,需要进度条来提醒用户文件上传进度

var callback = function(transferredAmount, totalAmount, totalSeconds){
 // 获取上传平均速率(KB/S)
 console.log(transferredAmount * 1.0 / totalSeconds / 1024);
 // 获取上传进度百分比
 console.log(transferredAmount * 100.0 / totalAmount);
};
obsClient.putObject({
 Bucket : 'bucketname',
 Key : 'objectname',
 SourceFile : document.getElementById('input-file').files[0]
 ProgressCallback: callback 
}, function (err, result) {
 if(err){
 console.error('Error-->' + err);
 }else{
 console.log('Status-->' + result.CommonMsg.Status);
 }
});
进度条的设置
<div
  v-for="item in progressArray"
  :key="item.fileUuid"
>
  <el-progress
    :text-inside="true"
    :stroke-width="16"
    :percentage="item.value"
  ></el-progress>
  <span class="filename-m">{{ item.name }}</span>
</div>

// 在文件上传中的callback中
var callback = function(transferredAmount, totalAmount, totalSeconds){
 // 获取上传平均速率(KB/S)
 console.log(transferredAmount * 1.0 / totalSeconds / 1024);
 // 获取上传进度百分比
 console.log(transferredAmount * 100.0 / totalAmount);
 let process = parseInt(transferredAmount * 100 / totalAmount)
 let index = this.progressArray.findIndex(v => v.uid == file.uid)
 if (index == -1) {
     _this.progressArray.push({
         value: process,
         uid: file.uid,
         name: file.name
     })
 } else {
     if (this.progressArray[index].value != process) {
         this.progressArray[index].value = process;
     }
 }
};

// 文件上传失败或成功后清空进度条
var clearProgress = function(this) {
  this.progressArray.splice(0,1)
}
文本下载

其中Key代表文件的唯一标识,下载对应文件时,Key需保持一致

obsClient.getObject({ 
 Bucket : 'bucketname', 
 Key : 'objectname'
}, function (err, result) { 
 if(err){ 
 console.error('Error-->' + err); 
 }else{ 
 console.log('Status-->' + result.CommonMsg.Status); 
 if(result.CommonMsg.Status < 300 && result.InterfaceResult){
 // 读取对象内容
 console.log('Object Content:'); 
 console.log(result.InterfaceResult.Content); 
 }
 }

文本下载方式下载返回结果中的result.InterfaceResult.Content是一个string对象。

二进制下载
obsClient.getObject({ 
 Bucket : 'bucketname', 
 Key : 'objectname', 
 SaveByType : 'arraybuffer'
}, function (err, result) { 
 if(err){ 
 console.error('Error-->' + err); 
 }else{ 
 console.log('Status-->' + result.CommonMsg.Status); 
 if(result.CommonMsg.Status < 300 && result.InterfaceResult){ 
 // 读取对象字节长度
 console.log('Object Length:\n'); 
 console.log(result.InterfaceResult.Content.byteLength); 
 }
 }

设置SaveByType为‘arraybuffer’指定使用二进制式下载。
二进制式下载方式下返回结果中的InterfaceResult.Content是一个arraybuffer对象。

文件下载
obsClient.getObject({
 Bucket : 'bucketname',
 Key : 'objectname',
 SaveByType : 'file'
}, function (err, result) {
 if(err){
 console.error('Error-->' + err);
 }else{
 console.log('Status-->' + result.CommonMsg.Status);
 if(result.CommonMsg.Status < 300 && result.InterfaceResult){
 // 获取下载对象的路径
 console.log('Download Path:'); 
 console.log(result.InterfaceResult.Content.SignedUrl); 
 }
 }
});

设置SaveByType为’file’生成下载路径。

https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0001.html
https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0001.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
华为云OBS提供了分段下载的功能,允许用户将大文件分成多个部分进行下载,从而提高下载效率并节省带宽和时间。华为云OBS分段下载的实现方式是通过HTTP协议的Range头信息来实现的。用户可以通过设置Range头信息中的起始位置和结束位置来指定需要下载的文件片段,服务器将只返回指定片段的数据给用户。 具体实现分段下载的方法如下: 1. 首先,你需要使用Java语言编写代码来实现华为云OBS文件的下载功能。你可以使用华为云OBS的Java SDK来简化操作。可以参考中的Java华为云OBS文件上传下载工具类来实现下载功能。 2. 使用华为云OBS的Java SDK,你可以通过设置GetObjectRequest对象的range属性来指定需要下载的文件片段的范围。例如,你可以设置range为"0-1023"表示只下载文件的前1024个字节,或者设置range为"1024-"表示从第1024个字节开始的所有数据。 3. 通过调用OBSClient的getObject方法并传入GetObjectRequest对象来发送下载请求。服务器将返回指定片段的数据给用户。 需要注意的是,华为云OBS分段下载功能需要服务器端支持,具体支持的范围大小可能会有限制。在使用分段下载功能时,建议参考华为云OBS的官方文档以了解更多详细信息和限制。 总结起来,华为云OBS提供了分段下载的功能,用户可以通过设置HTTP协议的Range头信息来指定需要下载的文件片段,服务器将只返回指定片段的数据给用户。使用Java语言可以通过华为云OBS的Java SDK来实现分段下载功能。具体的实现方法可以参考中的Java华为云OBS文件上传下载工具类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [图片批量上传至服务器/华为云obs 前台采用webuploader.js div+css布局 图片.zip华为云obs浏览器下载](https://blog.csdn.net/m0_54930214/article/details/127985386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [华为云OBS文件上传下载工具类](https://blog.csdn.net/weixin_45285213/article/details/125596661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [华为云obs参考代码以及demo](https://download.csdn.net/download/qq_38707432/10548349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值