Android上传图片到七牛云

写在前边
  • 现在的时间:2019-06-23
  • 怎样获得一个七牛云的存储空间就不写了,重点是怎么上传图片.
准备工作-处理权限
网络权限
  • 添加访问网络权限
    <uses-permission android:name="android.permission.INTERNET"/>
    
  • 设置允许发送http请求,否则android默认不允许发送http请求:在清单文件application标签上添加android:usesCleartextTraffic="true"
读取文件权限
  • 添加读取系统文件权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  • 因为是危险权限,还要作动态申请.
    private void getPer()
    {
        int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    
        if (permission != PackageManager.PERMISSION_GRANTED)
        {
            // 请求权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
    }
    
准备工作-获取七牛云相关的东西
获取AK与SK
获取要上传到的空间(bucket)
添加依赖
implementation 'com.qiniu:qiniu-android-sdk:7.3.15'
implementation 'com.qiniu:qiniu-java-sdk:7.2.+'

依赖主页:https://developer.qiniu.com/kodo/sdk/1236/android      https://github.com/qiniu/java-sdk

上传图片
protected void uploadPic()
{
    //指定zone的具体区域
    //FixedZone.zone0   华东机房
    //FixedZone.zone1   华北机房
    //FixedZone.zone2   华南机房
    //FixedZone.zoneNa0 北美机房


    /*
    Configuration config = new Configuration.Builder()
            .chunkSize(512 * 1024)        // 分片上传时,每片的大小。 默认256K
            .putThreshhold(1024 * 1024)   // 启用分片上传阀值。默认512K
            .connectTimeout(10)           // 链接超时。默认10秒
            .useHttps(true)               // 是否使用https 默认是false
            .responseTimeout(60)          // 服务器响应超时。默认60秒
            .recorder(recorder)           // recorder分片上传时,已上传片记录器。默认null
            .recorder(recorder, keyGen)   // keyGen 分片上传时,生成标识符,用于片记录器区分是那个文件的上传记录
            .zone(FixedZone.zone0)        // 设置区域,指定不同区域的上传域名、备用域名、备用IP。
    */


    Configuration config = new Configuration.Builder()
            .useHttps(true)               // 是否使用https上传域名
            .zone(FixedZone.zone0)        // 设置区域,指定不同区域的上传域名、备用域名、备用IP。
            .build();

    UploadManager uploadManager = new UploadManager(config); // UploadManager对象只需要创建一次重复使用

    String data = "/storage/emulated/0/DCIM/Camera/IMG_20190623_172115.jpg"; //要上传的文件
    String key = "test.jpg"; //在服务器的文件名
    /**
    * 生成token
    * create()方法的两个参数分别是 AK SK
    * uoloadToken()方法的参数是 要上传到的空间(bucket)
    */
    String token = Auth.create("kzdlPdSfFXp_Jgj32wlk5ef4r_Y171smSEyzYpX1", "SQ7MwgAQbsT1Sp-RwFg5iqK3m8vUU4fhCgvuEkIb").uploadToken("liyanxing-pic-server");

    /**
    * 调用put方法上传
    * 第一个参数 data:可以是字符串,是要上传图片的路径
    *                可以是File对象,是要上传的文件
    *                可以是byte[]数组,要是上传的数据
    * 第二个参数 key:字符串,是图片在服务器上的名称,要具有唯一性,可以用UUID
    * 第三个参数 token:根据开发者的 AK和SK 生成的token,这个token 应该在后端提供一个接口,然后android代码中发一个get请求获得这个tocken,但这里为了演示,直接写在本地了.
    * 第四个参数:UpCompletionHandler的实例,有个回调方法
    * 第五个参数:可先参数
    */
    uploadManager.put
    (
        data, key, token,
        new UpCompletionHandler()
        {
            /**
            * 回调方法
            * @param key 开发者设置的 key 也就是文件名
            * @param info 日志,包含上传的ip等
            * @param res 包括一个hash值和key
            */
            @Override
            public void complete(String key, ResponseInfo info, JSONObject res)
            {
                if(info.isOK())
                {
                    Log.i("上传结果:", "Upload Success");
                }
                else
                {
                    Log.i("上传结果:", "Upload Fail");
                    //如果失败,这里可以把info信息上报自己的服务器,便于后面分析上传错误原因
                }
                Log.i("key:", key + "\ninfo:" + info + "\nres:" + res);
            }
        },
        null
    );
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值