**关于阿里云oss图片批量上传问题解析**

本文详细记录了在Android项目中使用阿里云OSS进行图片批量上传时遇到的问题及解决方案。从理解API参数到数据处理,包括Endpoint、Bucket、STS等关键字段的使用,以及在没有直接接口时如何根据文档实现功能。在上传完成后,还强调了处理部分失败情况的策略,如删除已成功上传的图片,以避免浪费存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于阿里云oss图片批量上传问题解析
背景
最近在项目开发过程中遇到的问题,消耗了比较久的时间,过程曲折,虽然最终达到目的,但是鉴于各种常用的云数据在对象存储方面大同小异,所以记录一下。
理一下思路:
我们在调用第三方对象存储API的时候,通常需要解决以下问题:

1.考虑通用性
2.在调用API过程中需要的参数.
3.如何处理数据(使用方式、成功与失败)
4.调用过程中的异常处理

通用性

在整个App中好几个界面都涉及到图片上传,根据每个界面上传的特点,将其整合成了一个工具类。

参数
阅读阿里云的API以及SDK文档,找关键字,事实证明这样真不好,发现几个重要的字段:Endpoint、Bucket、STS、OssClient、KeyObject、Meta、data、OSSAsyncTask,我理解就是拿一个地址一层层找文件,完整的url长这样:
“http://” +BucketName+ “.” +END_POINT + “/” + ObjectKey

1.EndPoint:Oss区域地址 Bucket:里面的容器,放文件(Object)的地方,这里提一下bucketname
2.KeyObject:上传文件在oss中的名称
3.Meta:上传文件的自我描述,算是标记,为name-value类型 data:这个就是字面上的意思
4.data:字面上的意思
5.STS:鉴权方式,关于这个方式的安全性以及涉及到的参数及其含义详见OSS文档。
6.OssClient:看到Client其实你就能联想到网络请求 
7.OSSAsyncTask:异步任务,最终我就是差点当在这里,
看漏一句话:该任务属于安全上传,适用于高并发执行...我居然写到末尾把它硬生生写成同步,捂脸...

数据处理

图片上传过程中,每张图片的上传进度,成功与失败的数据返回处理,
上传过程中可能会出现的问题:比如说正在上传的图片被用户删了之类的等等。

准备工作

1.下载jar包:aliyun-oss-sdk-android-2.3.0.jar、okhttp-3.x.x.jar 和 okio-1.x.x.jar,加入libs中
2.设置权限:在manifests.xml中加入: 
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

代码片段:

public class PictureUpload {
    private static PictureUpload pictureUpload;
    /**
     * 上传client
     */
    OSS oss;
    /**
     * 上传次数
     */
    int number;
    /**
     * 成功上传(本地文件名作为key,阿里云地址为value)
     */
    Map<String, Object> success = new HashMap<>();
    /**
     * 失败上传(返回失败文件的本地地址)
     */
    List<String> failure = new ArrayList<>();
    /**
     * 上传回调
     */
    UploadListener uploadListener;
    /**
     * 上传任务列表
     */
    List<OSSAsyncTask> ossAsyncTasks = new ArrayList<>();
    /**
     * 自动更新Token
     */
    OSSCredentialProvider credetialProvider = new OSSFederationCredentialProvider() {
        @Override
        public OSSFederationToken getFederationToken() {
            try {
                //阿里鉴权请求
                AliAuthRes res = new JsonDefaultRequest(AliAuthRes.class).POST("", null, SharePerefrence.getTokenKey());
                return new OSSFederationToken(res.getAccessKeyId(), res.getAccessKeySecret(), res.getSecurityToken(), res.getExpiration());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    };
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值