正在写一个博客系统,需要使用到图片上传功能,但是由于服务器性能太差,直接上传到云服务器需要的时间会让人失去理智,所以找了一个其它云服务商提供的对象存储服务,看到七牛云有10G免费空间,已能满足需求,所以就动手了
直接上代码:
首先是一个上传文件的form表单,比较简陋,一个文件选框,一个按钮,搞定
<form action="/test/getToken" method="post" enctype="multipart/form-data">
<input name="imageFile" type="file">
<input type="submit" value="上传">
</form>
接下来是java部分的代码:
首先上maven依赖(官方文档让装这么多的 ):
<!--七牛云依赖-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.3.0, 7.3.99]</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--七牛云依赖-->
依赖搞完,上控制类代码:
@RestController
@RequestMapping("/upload")
public class UploadController {
@RequestMapping("")
public R<Void> get(@RequestParam("imageFile") MultipartFile multipartFile) {
//AK 从https://portal.qiniu.com/user/key获取
String accessKey = "57THhc6zpcwkT4I4t***********************";
//SK 和AK在同一地方获取
String secretKey = "uiUdVCl64yiAEM6Bx***********************";
//bucket 自己创建的存储空间名
String bucket = "rjgl";
//Configuration 构造方法中的参数是指定上传到哪里的服务器,可以不指定即无参,我指定的是华南地区服务器
Configuration cf = new Configuration(Region.huanan());
UploadManager um = new UploadManager(cf);
//创建上传token
Auth auth = Auth.create(accessKey, secretKey);
String token = auth.uploadToken(bucket);
Response response = null;
try {
// 上传 并返回结果
// put 方法的三个参数:
// 要上传的数据的字节数组 上传存储的文件名(我的是按文件原名存储) token
response = um.put(multipartFile.getBytes(), multipartFile.getOriginalFilename(), token);
} catch (QiniuException e) {
throw new UploadException("服务器错误!请稍后再试!");
} catch (IOException e) {
throw new UploadException("服务器错误!请稍后再试!");
}
//上传结果状态码为200表示上传成功 否则失败
if (response.statusCode==200){
return R.ok();
}else {
return R.fail(R.State.ERR_UNKNOWN,new Throwable("上传失败!未知错误!"));
}
}
}
至此,完了。
奥,springboot默认上传大小限制是1M,太小了,该大一点吧:
(改到了5MB)
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize(DataSize.parse("5MB"));
/// 总上传数据大小
return factory.createMultipartConfig();
}
最后,测试,成功!
总结:官方文档看的我好乱~这么点代码硬是看了一下午才写出来~ 始终菜是原罪,还得继续学!