Day16 七牛云和百度地图
一.七牛云对象存储
为什么使用七牛云存储??
公司中的项目后台存储数据,但是针对视频和图片等数据可以借助第三方七牛云统一管理存储。
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);
}
});
}
}