2019独角兽企业重金招聘Python工程师标准>>>
/**
* 通过输入流上传
*
* @param bucketNm bucket的名称
* @param in 输入流
* @return 上传结果
*/
public Result upload(String bucketNm, InputStream in, String key) throws QiniuException {
UploadManager uploadManager = getUploadManager();
//获取token
String token = getToken(bucketNm);
//上传输入流
Response response = uploadManager.put(in, key, token, null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
return new Result(true, putRet.key);
}
/**
* 异步上传数据
*
* @param bucketNm bucket的名称
* @param data 上传的数据
* @param key 上传凭证
* @param params 自定义参数,如 params.put("x:foo", "foo")
* @param mime 文件类型
* @param checkCrc 是否开启crc校验
* @param upCompletionHandler 回调处理方法
* @throws IOException io异常
*/
public void asyncUpload(String bucketNm, final byte[] data, final String key, StringMap params,
String mime, boolean checkCrc, UpCompletionHandler upCompletionHandler) throws IOException {
UploadManager uploadManager = getUploadManager();
String token = getToken(bucketNm);
uploadManager.asyncPut(data, key, token, null, mime, checkCrc, upCompletionHandler);
}
/**
* 上传文件
*
* @param bucketNm String
* @param file File
* @return Result
*/
public Result upload(String bucketNm, File file) throws QiniuException {
UploadManager uploadManager = getUploadManager();
String token = getToken(bucketNm);
Response response = uploadManager.put(file.getAbsolutePath(), newName(file.getName()), token);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
return new Result(true, putRet.key);
}
/**
* 断点续传,分段上传方法
*
* @param bucketNm 存储区域
* @param file 文件
* @param key 文件别名
* @param params 文件名过滤属性
* @param mime 文件类型
* @param checkCrc crc文件校验是否开启
* @return 返回结果对象
*/
public Result uploadWithRecorder(String bucketNm, File file, String key, StringMap params, String mime, boolean checkCrc) throws Exception {
Result result;
UploadManager uploadManager = getUploadManagerWithRecorder();
String token = getToken(bucketNm);
Response response = uploadManager.put(file, key, token, params,
mime, checkCrc);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
result = new Result(true, putRet.key);
return result;
}
三种上传方式的情况比较说明:
比较三种上传方式:
同步上传:同步方式上传会等待任务执行完成后,才会执行下一个任务,效率较低
异步上传:提交任务后,不需要等待任务完成,直接结束,开始下一个任务,任务处理完成后会回调相关方法,返回处理结果
分段/断点上传:对于文件较大的情况,可以采用分段多线程(?)上传的方式,加快上传效率,当上传过程中出现网络中断,客户端服务端异常的情况,等待服务正常后,不需要从开始上传,可以从上次中断的地方上传,减少了重复上传时间。