之前分享过图片上传到项目中和本地中,但是有时项目中会用到大量的图片和小视频,为了分担服务器压力,可以将将文件都放在七牛云,本文主要介绍如何将图片上传到七牛云图床上面。上传到七牛云与之前上传到项目中/本地主要是控制层代码不同,前端部分,请参考前文:Spring MVC 图片上传及预览,本文详情见:http://www.dustyblog.cn/116.html
一、首先引入七牛的jar包
- <!-- 七牛云 -->
- <dependency>
- <groupId>com.qiniu</groupId>
- <artifactId>qiniu-java-sdk</artifactId>
- <version>7.1.1</version>
- </dependency>
二、我这里封装了一个七牛上传的工具类:QiNiuUtil.java,可以在需要使用的时候调用该工具类,返回的是上传的图片的访问地址
该工具类的具体配置:秘钥、上传空间、域名等需要根据自己的情况更改。如果对七牛云的使用还不是很熟练,建议参考:七牛云:创建自己的图床
- public class QiNiuUtil {
- //设置账号的AK和SK密钥
- private static final String ACCESS_KEY = "***********************************";
- private static final String SECRET_KEY = "***********************************";
- // 上传空间域名
- private static final String bucketNameUrl = "http://upload.dustyblog.cn";
- //要上传的空间
- private static final String bucketName = "upload-blog";
- //密钥
- private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
- /**
- * 上传图片至七牛云,返回图片地址
- * @param filePath :文件本地的绝对路径
- * @param fileName :文件名称
- * @return
- * @throws IOException
- */
- public String upload(String filePath, String fileName) throws IOException{
- //创建上传对象
- UploadManager uploadManager = new UploadManager();
- try {
- //调用put方法上传
- Response res = uploadManager.put(filePath, fileName, auth.uploadToken(bucketName));
- } catch (QiniuException e) {
- Response r = e.response;
- try {
- //响应的文本信息
- System.out.println(r.bodyString());
- } catch (QiniuException e1) {
- //ignore
- }
- }
- // 图片访问地址
- String url = bucketNameUrl + "/" + fileName;
- return url;
- }
- }
三、案例演示:
这里只放出的是control 代码,前端HTML 和ajax请求代码可直接使用:Spring MVC 图片上传及预览
- @RequestMapping(value = "/uploadQiuNiu", method = RequestMethod.POST)
- @ResponseBody
- public String uploadQiNiu(@RequestParam("file") MultipartFile file) throws Exception{
- //如果文件不为空,写入上传路径
- if(!file.isEmpty()) {
- //文件的完整名称,如image.jpg
- String filename = file.getOriginalFilename();
- //文件名,如image
- String name = filename.substring(0,filename.indexOf("."));
- //文件后缀,如.jpg
- String suffix = filename.substring(filename.lastIndexOf("."));
- //文件路径:
- String path = "E:\\upload";
- File filepath = new File(path,filename);
- //若文件存在重命名,更改文件名如:image(1).jpg 后上传
- String newFilename = filename;
- while(filepath.exists()) {
- newFilename = name+"("+index+")"+suffix;
- String parentPath = filepath.getParent();
- filepath = new File(parentPath+File.separator+newFilename);
- filename = newFilename;
- index++;
- }
- //判断路径是否存在,如果不存在就创建一个
- if (!filepath.getParentFile().exists()) {
- filepath.getParentFile().mkdirs();
- }
- //将上传文件保存到一个目标文件当中
- file.transferTo(new File(path + File.separator + filename));
- /**
- * 七牛上传
- */
- String URL = "";
- QiNiuUtil qiniuUtil = new QiNiuUtil();
- try {
- path = path + "\\"+filename;
- //上传到七牛云
- URL = qiniuUtil.upload(path, filename);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- URL = "上传到七牛云失败!";
- e.printStackTrace();
- }
- // 返回图片链接地址给前端
- return URL;
- }
- return "EMPTY";
- }
上传之后可以发现,返回的已经是七牛云图床的链接地址,在进入七牛云相应的空间,可以看见我上传的图片已经在里面了,说明成功了!例如我这里返回的:http://upload.dustyblog.cn/test.jpg