前言
上传文件在各大网站中都是随处可见的,但是通常文件小到几KB,大到上百MB,如果不对上传接口做处理的话,会发现上传文件过大时就会导致等待时间过长,而且还存在失败的可能,所以我们就需要对接口进行处理。处理的方法通常都是进行分片上传
分片上传本质就是在前端把一个完整的文件拆分成若干份文件上传,上传完成后,服务器再把上传的若干份文件合并成一个完整的文件,再删除若干份分片文件。
本篇文章中我们使用七牛云来进行分片上传。为什么使用七牛云因为本博客就是使用的七牛云,O(∩_∩)O哈哈~
上传代码
private String fragmentationUpload(MultipartFile file,String suffix){
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
cfg.resumableUploadMaxConcurrentTaskCount = 2; // 设置分片上传并发,1:采用同步上传;大于1:采用并发上传
String localFilePath = DateUtil.dateTimeToStr(DateUtil.getNowDate(), DateUtil.YYYYMMDD) +"_"+ DateUtil.getNowDate().getTime();
String key = null;
Auth auth = Auth.create(qi_niu_accessKey, qi_niu_secretKey);
String upToken = auth.uploadToken(qi_niu_bucket);
String localTempDir = Paths.get(System.getenv("java.io.tmpdir"), qi_niu_bucket).toString();
FileInputStream inputStream = null;
try {
//设置断点续传文件进度保存目录
FileRecorder fileRecorder = new FileRecorder(localTempDir);
UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
try {
inputStream = (FileInputStream) file.getInputStream();
Response response = uploadManager.put(inputStream, localFilePath + "." + suffix, upToken,null,null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
key = qi_niu_url + putRet.key;
} catch (QiniuException ex) {
ex.printStackTrace();
if (ex.response != null) {
System.err.println(ex.response);
try {
String body = ex.response.toString();
System.err.println(body);
} catch (Exception ignored) {
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
return key;
}
本文共 283 个字数,平均阅读时长 ≈ 1分钟
可以可以
想想你的文章写的特别好www.jiwenlaw.com
兄弟写的非常好 https://www.cscnn.com/