最近用flutter开发IM软件,用到腾讯云上传图片视频等资源,发现居然没有改插件,于是动动手自己写了个iOS和安卓的
Android 接入腾讯云上传工具,iOS在另一文章中有详细记载,有问题可以留言
/**
* 腾讯云
*/
public class Plugin implements MethodCallHandler {
Registrar registrar;
MethodChannel channel;
public TencentCosPlugin(Registrar registrar, MethodChannel channel) {
this.registrar = registrar;
this.channel = channel;
}
/**
* Plugin registration.
*/
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "tencent_cos");
channel.setMethodCallHandler(new TencentCosPlugin(registrar, channel));
}
@Override
public void onMethodCall(MethodCall call, final Result result) {
if (call.method.equals("TencentCos.uploadFile")) {
LocalSessionCredentialProvider localCredentialProvider = new LocalSessionCredentialProvider(call.<String>argument("secretId"),
call.<String>argument("secretKey"), call.<String>argument("sessionToken"),
Long.parseLong(call.argument("expiredTime").toString())
);
String region = call.argument("region");
String appid = call.argument("appid");
String bucket = call.argument("bucket");
String cosPath = call.argument("cosPath");
final String localPath = call.argument("localPath");
TransferConfig transferConfig = new TransferConfig.Builder().build();
CosXmlServiceConfig.Builder builder = new CosXmlServiceConfig.Builder().setAppidAndRegion(appid, region).setDebuggable(false).isHttps(true);
//创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数
CosXmlServiceConfig serviceConfig = new CosXmlServiceConfig(builder);
CosXmlService cosXmlService = new CosXmlService(registrar.context(), serviceConfig, localCredentialProvider);
//初始化 TransferManager
TransferManager transferManager = new TransferManager(cosXmlService, transferConfig);
//上传文件
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath, localPath, null);
final HashMap<String, Object> data = new HashMap<>();
data.put("localPath", localPath);
data.put("cosPath", cosPath);
cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
@Override
public void onProgress(final long complete, final long target) {
((Activity) registrar.activeContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
// result.success( complete + "====run====" + target);
channel.invokeMethod("onProgress", complete + "====run====" + target);
}
});
Log.e("TencentCosPlugin", "onProgress =${progress * 100.0 / max}%");
}
});
//设置返回结果回调
cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {
@Override
public void onSuccess(CosXmlRequest request, CosXmlResult httPesult) {
Log.d("TencentCosPlugin", "Success: " + httPesult.printResult());
((Activity) registrar.activeContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
result.success("0");
}
});
}
@Override
public void onFail(CosXmlRequest request, CosXmlClientException exception, CosXmlServiceException serviceException) {
Log.d("TencentCosPlugin", "Failed: " + (exception.toString() + serviceException.toString()));
data.put("message", (exception.toString() + serviceException.toString()));
((Activity) registrar.activeContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
result.success("1");
//
}
});
}
});
} else {
result.notImplemented();
}
}
}
更多详解:
喜欢可以加Q群号:913934649,点赞,评论;
简书: https://www.jianshu.com/u/88db5f15770d
网友评论