android阿里云的OSS的小demo

 

一、官方文档和开通阿里云地址

阿里云oss的文档

二、集成准备工作

  1. 在管理控制台找到OOS并开通
  2. 点击存储空间,创建bucket

(这里简单就这么说,如果不明白可以看文档的快速入门最下面是一个视频 哪里很详细的  快速入门

三、集成开始

  1、在AS里面的app里面的  build.gradle添加一个依赖

    //阿里云oss
    compile 'com.aliyun.dpa:oss-android-sdk:+'

  2、在 AndroidManifest.xml 文件中已经配置了这些权限,否则,SDK 将无法正常工作

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

  3、添加混淆  项目名\app\的proguard-rules.pro文件 加入

    -keep class com.alibaba.sdk.android.oss.** { *; }
    -dontwarn okio.**
    -dontwarn org.apache.commons.codec.binary.**

  4、写一个工具类 Constant.java  文件的常量在你的阿里云的创建时候就给你了

public class Constant {

    public final static String ALIYUN_OSS_ENDPOINT = "你的END_POINT";
    public final static String ALIYUN_OSS_BUCKET_NAME = "你的BUCKET_NAME";
    public final static String ALIYUN_OSS_ACCESS_KEY_ID = "你的Access Key ID";
    public final static String ALIYUN_OSS_ACCESS_KEY_SECRET = "你的Access Key Secret";
}

  5、还要加一个工具类HashUtil.java 

public class HashUtil {
    private static final char HEX_DIGITS[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'a', 'b', 'c', 'd', 'e', 'f'};

    private static String convertToHexString(byte[] b) {
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (byte a : b) {
            sb.append(HEX_DIGITS[(a & 0xf0) >>> 4]);
            sb.append(HEX_DIGITS[a & 0x0f]);
        }
        return sb.toString();
    }

    /**
     * Get a String's HashCode
     *
     * @param str String
     * @return HashCode
     */
    public static String getMD5String(String str) {
        MessageDigest md5;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        md5.update(str.getBytes());
        return convertToHexString(md5.digest());
    }

    /**
     * Get a File's HashCode
     *
     * @param file File
     * @return HashCode
     */
    public static String getMD5String(File file) {
        // Create md5
        MessageDigest md5;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        // Stream
        InputStream in = null;
        byte[] buffer = new byte[1024];
        int numRead;
        // Read
        try {
            in = new FileInputStream(file);
            while ((numRead = in.read(buffer)) > 0) {
                md5.update(buffer, 0, numRead);
            }
            return convertToHexString(md5.digest());
        } catch (Exception e) {
            return null;
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

  6、写一个调用OSS的工具类  UploadHelper.java  复制就好啦 

     注意一个地方  可访问的url 注释下面代码 最后一个   3600L * 1000 * 24 * 365   是你保存图片时长 你自己设置

public class UploadHelper {


    private Context context;

    public UploadHelper(Context context) {
        this.context = context;
    }



    private  OSS getOSSClient() {
        OSSCredentialProvider credentialProvider =
                new OSSPlainTextAKSKCredentialProvider(Constant.ALIYUN_OSS_ACCESS_KEY_ID ,
                        Constant.ALIYUN_OSS_ACCESS_KEY_SECRET);
        return new OSSClient( context, Constant.ALIYUN_OSS_ENDPOINT, credentialProvider);
    }

    /**
     * 上传方法
     *
     * @param objectKey 标识
     * @param path      需上传文件的路径
     * @return 外网访问的路径
     */
    private String upload(String objectKey, String path) {
        // 构造上传请求
        PutObjectRequest request =
                new PutObjectRequest(Constant.ALIYUN_OSS_BUCKET_NAME,
                        objectKey, path);
        try {
            //得到client
            OSS client = getOSSClient();
            //上传获取结果
            PutObjectResult result = client.putObject(request);
            //获取可访问的url
            String url = client.presignConstrainedObjectURL(Constant.ALIYUN_OSS_BUCKET_NAME, objectKey, 3600L * 1000 * 24 * 365);
            //格式打印输出
            Log.i("oss==zhs",String.format("PublicObjectURL:%s", url));
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    /**
     * 上传普通图片
     *
     * @param path 本地地址
     * @return 服务器地址
     */
    public String uploadImage(String path) {
        String key = getObjectImageKey(path);
        return upload(key, path);
    }

    /**
     * 上传图片
     *
     * @param path 本地地址
     * @return 服务器地址
     */
    public String uploadUser(String path) {
        String key = getObjectPortraitKey(path);
        return upload(key, path);
    }

    /**
     * 上传audio
     *
     * @param path 本地地址
     * @return 服务器地址
     */
    public String uploadAudio(String path) {
        String key = getObjectAudioKey(path);
        return upload(key, path);
    }


    /**
     * 获取时间
     *
     * @return 时间戳 例如:201805
     */
    private static String getDateString() {
        return DateFormat.format("yyyyMM", new Date()).toString();
    }

    /**
     * 返回key
     *
     * @param path 本地路径
     * @return key
     */
    //格式: image/201805/sfdsgfsdvsdfdsfs.jpg
    private static String getObjectImageKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("image/%s/%s.jpg", dateString, fileMd5);
    }

    //格式: portrait/201805/sfdsgfsdvsdfdsfs.jpg
    private static String getObjectPortraitKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("user/%s/%s.jpg", dateString, fileMd5);
    }

    //格式: audio/201805/sfdsgfsdvsdfdsfs.mp3
    private static String getObjectAudioKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("audio/%s/%s.mp3", dateString, fileMd5);
    }


}

  7、准备好这些直接调用就好了

UploadHelper uploadHelper = new UploadHelper(this);
PhotoPath = uploadHelper.uploadUser("你的图片本机地址");

注意,在调用的时候可能出现两种bug 

  1. 第一种是主线程异常  你可能需要开一个子线程去写一下   
  2. 第二种是小米手机(我刚好拿到小米4测试的)拿不到你图片地址需要你做一个适配 这个不写进来了百度就好

感谢参考博客:https://blog.youkuaiyun.com/qq_37971615/article/details/81975465?tdsourcetag=s_pctim_aiomsg 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值