springboot+七牛云对象存储实现文件上传

1,首先得有存储空间
在这里插入图片描述
2,然后查看CDN加速域名
在这里插入图片描述
3,查看Access/Secret Key
在这里插入图片描述
导入七牛云的JDK

   <dependency>
        <groupId>com.qiniu</groupId>
        <artifactId>qiniu-java-sdk</artifactId>
        <version>[7.7.0,7.7.99]</version>
    </dependency>
</dependencies>

4,然后按照Spring MVC那套写Servicve、Controller
4.1 Service Interface

public interface UploadService {

    /**
     * 文件上传
     * @param is   文件流
     * @param fileName  文件名称
     */
    public String uploadFile(InputStream is,String fileName);
}

4.2 Service Implement


import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

@Service
public class UploadServiceImpl implements UploadService{

    @Autowired
    QiniuConfigBean qiniuConfigBean;

    @Autowired
    private static final Logger LOGGER = LoggerFactory.getLogger(UploadServiceImpl.class);

    @Override
    public String uploadFile(InputStream is, String fileName) {
        String finFileName = "";
        try {

            //构造一个带指定Region对象的配置类
            Configuration cfg = new Configuration(Region.autoRegion());
            UploadManager uploadManager = new UploadManager(cfg);
            //上传凭证        看步骤3
            String accessKey = "填写你自己的AK";
            String secretKey = "填写你自己的SK";
            //存储空间的名字
            String bucket = "看步骤1,填写你自己的存储空间名字";
            //临时的域名,4.24过期,需要自己去引入域名
            String domain = "看步骤2,写你自己的CDN域名clouddn.com";
            //七牛云文件鉴权
            Auth auth = Auth.create(accessKey,secretKey);
            //文件名字组成: UserTypeEnum.getClass.getSimpleName() + "^" + account + "^" + dateTime + "^" + OriginFileName              遍历
            //todo !!!这里就是笔者写的DateTime工具类,文件名看自己需要修改下面这一行代码哈
            finFileName = LocalDateTimeUtils.getLocalDateTime() + "^" +fileName;
             
            if(StringUtils.isNullOrEmpty(finFileName)) throw new MsgException("上传失败,请重试");
            String upToken = auth.uploadToken(bucket);
            Response response = uploadManager.put(is,finFileName,upToken,null,null);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(),DefaultPutRet.class);
            System.out.println(putRet.key + "  " +putRet.hash);
            return domain + "/" +putRet.key;
        } catch (QiniuException e) {
            Response r = e.response;
            LOGGER.info(r.getInfo());
            throw new MsgException("存储文件失败");
        }catch (MsgException e){
            LOGGER.error(e.getMessage());
            throw e;
        } catch (NoSuchMethodException e) {
            LOGGER.error(e.getMessage());
            return null;
        } catch (IllegalAccessException e) {
            LOGGER.error(e.getMessage());
            return null;
        } catch (InvocationTargetException e) {
            LOGGER.error(e.getMessage());
            return null;
        }catch (Exception e){
            LOGGER.error(e.getMessage());
            throw e;
        }
    }
}

4.3 Controller

@Slf4j
@Api(tags = "文件API")
@RestController
public class UploadController {

    @Autowired
    private UploadService uploadService;

    @ApiOperation("上传文件")
    @SaCheckLogin
    @PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)         //My   file.getInputStream(), file.getOriginalFilename()
    public SysResult upload(@RequestPart("file") MultipartFile file){
        try {
            if(file.isEmpty()){
                throw new MsgException("空文件");
            }
            String uploadFile = uploadService.uploadFile(file.getInputStream(),file.getOriginalFilename());
            Map<String,Object> map = new HashMap<>();
            map.put("url",uploadFile);
            if(uploadFile == null) throw new MsgException("上传失败");
            return new SysResult(SysResultEnum.SUCCESS.getIndex(),SysResultEnum.SUCCESS.getName(),map);
        } catch (MsgException e) {
            return new SysResult(SysResultEnum.Client_ERROR.getIndex(),e.getMessage(),null);
        }catch (Exception e){
            return new SysResult(SysResultEnum.SYS_ERROR.getIndex(),e.getMessage(),null);
        }
    }

}

5,测试(Swagger UI我就不赘述了)
在这里插入图片描述
在这里插入图片描述
原本没有这个PDF,如下
在这里插入图片描述
点击execute执行,请求成功,返回url。
在这里插入图片描述
结果:
在这里插入图片描述
以URI形式访问/下载 上传的文档:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Spring Boot整合七牛云上传文件,可以按照以下步骤进行: 1.引入七牛云Java SDK 在pom.xml中引入七牛云Java SDK: ```xml <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0,)</version> </dependency> ``` 2.配置七牛云参数 在application.yml或application.properties中添加七牛云的参数: ```yml qiniu: accessKey: your_access_key secretKey: your_secret_key bucket: your_bucket_name domain: your_domain_name ``` 3.编写上传文件的代码 在需要上传文件的地方编写上传文件的代码,示例代码如下: ```java @Service public class QiniuService { @Autowired private QiniuConfig qiniuConfig; /** * 上传文件到七牛云 * * @param file 文件对象 * @return 文件访问URL */ public String uploadFile(File file) throws QiniuException { // 构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(Zone.autoZone()); // ...其他参数参考类注释 UploadManager uploadManager = new UploadManager(cfg); // 生成上传凭证,然后准备上传 String accessKey = qiniuConfig.getAccessKey(); String secretKey = qiniuConfig.getSecretKey(); String bucket = qiniuConfig.getBucket(); // 如果是Windows情况下,格式是 D:\\qiniu\\test.png String localFilePath = file.getAbsolutePath(); // 默认不指定key的情况下,以文件内容的hash值作为文件名 String key = null; Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket); try { Response response = uploadManager.put(localFilePath, key, upToken); // 解析上传成功的结果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); return qiniuConfig.getDomain() + "/" + putRet.key; } catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try { System.err.println(r.bodyString()); } catch (QiniuException ex2) { // ignore } throw ex; } } } ``` 4.测试上传文件 在测试类中编写测试上传文件的代码,示例代码如下: ```java @RunWith(SpringRunner.class) @SpringBootTest public class QiniuServiceTest { @Autowired private QiniuService qiniuService; @Test public void testUploadFile() throws QiniuException { File file = new File("test.png"); String url = qiniuService.uploadFile(file); System.out.println(url); } } ``` 其中,test.png是要上传的文件名。运行测试类即可上传文件到七牛云,并返回文件的访问URL。 以上就是Spring Boot整合七牛云上传文件的全部步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值