最近做项目用到了七牛云存储,就讲一下如何使用springMVC对视频上传到七牛云上。
Java SDK依赖的第三方库及其版本如下:
这个是使用maven管理的依赖。
也可以自己手动下载jar包 通过这个地址 找到
就可以下载需要的依赖的。
上传使用的是服务器直传的方式。
服务端直传是指客户利用七牛服务端SDK从服务端直接上传文件到七牛云,交互的双方一般都在机房里面,所以服务端可以自己生成上传凭证,然后利用SDK中的上传逻辑进行上传,最后从七牛云获取上传的结果,这个过程中由于双方都是业务服务器,所以很少利用到上传回调的功能,而是直接自定义returnBody来获取自定义的回复内容。
构建配置类
七牛存储支持空间创建在不同的机房,在使用七牛的Java SDK中的UploadManager上传文件之前,必须要构建一个上传用的Configuration对象,在该对象中,可以指定空间对应的Zone以及其他的一些影响上传的参数。
//构造一个带指定Zone对象的配置类
Configuration cfg =newConfiguration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager =newUploadManager(cfg);
//...生成上传凭证,然后准备上传
其中关于Zone对象和机房的关系如下:
机房:Zone对象
华东:Zone.zone0()
华北:Zone.zone1()
华南:Zone.zone2()
北美:Zone.zoneNa0()
最好是通过字节数组上传。
不废话,来看springMVC的控制器。
@Controller()
public class UploadController {
// 构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
// ...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
// ...生成上传凭证,然后准备上传
String accessKey = "xxxx";
String secretKey = "xxxx";
//上传到指定的七牛云存储的一个空间中
String bucket = "xxxx";
// 默认不指定key的情况下,以文件内容的hash值作为文件名(上传后的文件名)
String key = null;
@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestParam(value = "file", required = false) CommonsMultipartFile file) throws UnsupportedEncodingException {
try {
//得到上传文件的文件名,并赋值给key作为七牛存储的文件名
key = file.getOriginalFilename();
//把文件转化为字节数组
InputStream is = file.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = is.read(b)) != -1) {
bos.write(b, 0, len);
}
byte[] uploadBytes = bos.toByteArray();
//进行七牛的操作,不懂去七牛的sdk上看
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
//默认上传接口回复对象
DefaultPutRet putRet;
try {
//进行上传操作,传入文件的字节数组,文件名,上传空间,得到回复对象
Response response = uploadManager.put(uploadBytes, key, upToken);
putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);//key文件名
System.out.println(putRet.hash);//hash七牛返回的文件存储的地址,可以使用这个地址加七牛给你提供的前缀访问到这个视频。
上传凭证是你注册七牛云时候给的,就是accessKey和secretKey。bucket是你在七牛上自己建立的空间,也是必须的。key是文件名,不指定七牛会给你生成一个默认名,并且是返回这个上传的地址返回的地址。