Day16 七牛云和百度地图

这篇博客介绍了如何在Android应用中集成七牛云对象存储进行图片上传,并结合环信发送图片。首先,通过七牛云服务端搭建和客户端SDK配置实现文件上传。然后,详细展示了获取上传Token、初始化UploadManager及实际上传图片的步骤。此外,还提及了如何利用百度地图实现位置分享的功能。
摘要由CSDN通过智能技术生成

一.七牛云对象存储

为什么使用七牛云存储??
公司中的项目后台存储数据,但是针对视频和图片等数据可以借助第三方七牛云统一管理存储。

1.服务端搭建:已搭建,调用下面接口获得token即可

http://43.143.146.165:7777/qiniu/getToken

2.客户端上传文件:查看开发文档

https://developer.qiniu.com/kodo/1236/android

(1)依赖:注意okhttp如果之前添加注释掉,不能重复
  // 1 直接导入
    implementation 'com.qiniu:qiniu-android-sdk:8.4.+'
// 2 如果要修改okhttp依赖的版本,可采用以下方式(强烈建议使用七牛库依赖的okhttp版本)
    implementation ('com.qiniu:qiniu-android-sdk:8.4.+'){
        exclude (group: 'com.squareup.okhttp3', module: 'okhttp')
    }
    implementation 'com.squareup.okhttp3:okhttp:4.2.2'
(2)application初始化:

注意:服务器在华南区域需要改为FixedZone.zone2

public class App extends Application {
    public static    UploadManager uploadManager;
    @Override
    public void onCreate() {
        super.onCreate();

        Configuration config = new Configuration.Builder()
                .connectTimeout(90)              // 链接超时。默认90秒
                .useHttps(true)                  // 是否使用https上传域名
                .useConcurrentResumeUpload(true) // 使用并发上传,使用并发上传时,除最后一块大小不定外,其余每个块大小固定为4M,
                .concurrentTaskCount(3)          // 并发上传线程数量为3
                .responseTimeout(90)             // 服务器响应超时。默认90秒
//                .recorder(recorder)              // recorder分片上传时,已上传片记录器。默认null
//                .recorder(recorder, keyGen)      // keyGen 分片上传时,生成标识符,用于片记录器区分是那个文件的上传记录
                .zone(FixedZone.zone2)           // 设置区域,不指定会自动选择。指定不同区域的上传域名、备用域名、备用IP。
                .build();

// 重用uploadManager。一般地,只需要创建一个uploadManager对象
        uploadManager = new UploadManager(config);
        
        
        
        ZXingLibrary.initDisplayOpinion(this);
        ARouter.openDebug();
        ARouter.openLog();
        ARouter.init(this);
        EMOptions options = new EMOptions();
// 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
// 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
// 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);

初始化
//        EMClient.getInstance().init(this, options);
在做打包混淆时,关闭debug模式,避免消耗不必要的资源
//        EMClient.getInstance().setDebugMode(true);
        //EaseIM初始化
        if(EaseIM.getInstance().init(this, options)){
            //在做打包混淆时,关闭debug模式,避免消耗不必要的资源
            EMClient.getInstance().setDebugMode(true);
            //EaseIM初始化成功之后再去调用注册消息监听的代码 ...
        }
    }
}

(3)上传图片到七牛云:
OkHttpClient build = new OkHttpClient.Builder().build();
        Request request = new Request.Builder()
                .get()
                .url("http://43.143.146.165:7777/qiniu/getToken")
                .build();
        build.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                String token  = response.body().string();

                App.uploadManager.put("/sdcard/Pictures/hongbao.jpeg", null, token,
                        new UpCompletionHandler() {
                            @Override
                            public void complete(String key, ResponseInfo info, JSONObject res) {
                                //res 包含 hash、key 等信息,具体字段取决于上传策略的设置
                                if(info.isOK()) {
                                    Log.i("qiniu", "Upload Success");
                                } else {
                                    Log.i("qiniu", "Upload Fail");
                                    //如果失败,这里可以把 info 信息上报自己的服务器,便于后面分析上传错误原因
                                }
                                try {
                                    String name = "http://ytx.fenghongzhang.com/" + res.getString("key");
                                    Log.i("qiniu", "complete: "+name);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }, null);
            }
        });
(4)结合环信将用户发送的图片上传到七牛云
public class ChatFragment extends EaseChatFragment {


    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (data != null) {
            Uri selectedImage = data.getData();
            if (selectedImage != null) {
                String filePath = EaseFileUtils.getFilePath(mContext, selectedImage);
                upload(filePath);//上传图片

                if(!TextUtils.isEmpty(filePath) && new File(filePath).exists()) {
                    chatLayout.sendImageMessage(Uri.parse(filePath));
                }else {
                    EaseFileUtils.saveUriPermission(mContext, selectedImage, data);
                    chatLayout.sendImageMessage(selectedImage);
                }
            }
        }
    }


    public void upload(String path){
        OkHttpClient build = new OkHttpClient.Builder().build();
        Request request = new Request.Builder()
                .get()
                .url("http://43.143.146.165:7777/qiniu/getToken")
                .build();
        build.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {

                String token  = response.body().string();

                App.uploadManager.put(path, null, token,
                        new UpCompletionHandler() {
                            @Override
                            public void complete(String key, ResponseInfo info, JSONObject res) {
                                //res 包含 hash、key 等信息,具体字段取决于上传策略的设置
                                if(info.isOK()) {
                                    Log.i("qiniu", "Upload Success");
                                } else {
                                    Log.i("qiniu", "Upload Fail");
                                    //如果失败,这里可以把 info 信息上报自己的服务器,便于后面分析上传错误原因
                                }
                                try {
                                    String name = "http://ytx.fenghongzhang.com" + res.getString("key");
                                    Log.i("qiniu", "complete: "+name);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                                Log.i("qiniu", key + ",\r\n " + info + ",\r\n " + res);
                            }
                        }, null);


            }
        });

    }
}

二.百度地图:发送位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值