spring boot上传图片至七牛云服务器做存储

1. pom.xml引入七牛云的sdk

<dependency>
         <groupId>com.qiniu</groupId>
         <artifactId>qiniu-java-sdk</artifactId>
         <version>[7.2.0,7.2.99]</version>
</dependency>

2. 写一个图片上传的类QiniuUploadFileUtil

package com.chenxq.blog.personalBlog.Util;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;

import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;


public class QiniuUploadFileUtil {

    // 这个是上传文件时在本地的临时文件夹
    @Value("${baseUploadUrl}")
    private   String baseUploadUrl;
    // 设置需要操作的账号的AK和SK,可以在七牛云的个人中心查询到
    private static   String accessKey="=======";

    private static   String secretKey="====";
    
    // 要上传的空间名
    private static  String bucketname="====";

    // 密钥
    private static  Auth auth = Auth.create(accessKey, secretKey);
   

    //上传 file是上传的文件地址,key是上传的图片名称
    public static String upload(File file, String key) throws IOException{
        // 创建上传对象,Zone*代表地区
        System.out.print(bucketname);
        Configuration configuration = new Configuration(Zone.zone2());
        UploadManager uploadManager = new UploadManager(configuration);
        try {
            // 调用put方法上传
            String token = auth.uploadToken(bucketname);
            if(StringUtils.isEmpty(token)) {
                System.out.println("未获取到token,请重试!");
                return null;
            }
            Response res = uploadManager.put(file,key,token);
            // 打印返回的信息
            if (res.isOK()){
                System.out.print(res.bodyString());
                //这里的key返回的就是存储在七牛云上的地址
                return key;
            }
        }catch (QiniuException e) {
            Response r = e.response;
            // 请求失败时打印的异常的信息
            e.printStackTrace();
            System.out.println("error "+r.toString());
            try {
                // 响应的文本信息
                System.out.println(r.bodyString());
            } catch (QiniuException e1) {
                System.out.println("error "+e1.error());
            }
        }
        return null;
    }
    
}

3. 在controller里调用

    @ApiOperation("图片上传至七牛云")
    @ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "File")
    @RequestMapping(value="/uploadqiniu",method= {RequestMethod.POST,RequestMethod.GET})
    @ResponseBody
    public Result uploadqiniu(@RequestParam("file")MultipartFile file,HttpServletRequest request) {
        //获得文件名字
        String fileName=file.getOriginalFilename();
        fileName= FileNameUtil.getFileName(fileName);

        File dest = new File(baseUploadUrl + fileName);
        
        try {
            //将MultipartFile类转换成File类
            file.transferTo(dest);
            String key=QiniuUploadFileUtil.upload(dest, fileName);
            return ResultUtil.success(key);
            
        }catch(Exception e) {
            e.printStackTrace();
        }
        // 返回
        return ResultUtil.error(202,"未知错误导致上传失败");
    }
    

4. 使用:http://七牛云域名//返回的key值,就可以访问图片了。

 

posted on 2020-10-10 15:23  XIAOQINGC  阅读(274)  评论(0编辑  收藏  举报

导航