热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Springboot项目(二十七)——集成七牛云,实现简单的文件上传下载

项目结构代码编写pom文件org.springframework.boot

项目结构


代码编写

pom文件

org.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-weborg.projectlomboklomboktrueorg.springframework.bootspring-boot-startercom.qiniuqiniu-java-sdk[7.7.0, 7.7.99]com.squareup.okhttp3okhttp3.14.2compilecom.google.code.gsongson2.8.5compilecom.qiniuhappy-dns-java0.1.6test

yml文件

server:port: 8077
oss:qiniu:accessKey: secretKey: # 空间名称bucketName: # 存储区域zone: huabei# 访问域名domain:
spring:thymeleaf:cache: false

配置类

package com.lx.config;import com.google.gson.Gson;
import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class QiNiuConfig {@Value("${oss.qiniu.accessKey}")private String accessKey;@Value("${oss.qiniu.secretKey}")private String secretKey;@Value("${oss.qiniu.zone}")private String zone;/*** 初始化配置*/@Beanpublic com.qiniu.storage.Configuration ossConfig(){switch (zone) {case "huadong":return new com.qiniu.storage.Configuration(Region.huadong());case "huabei":return new com.qiniu.storage.Configuration(Region.huabei());case "huanan":return new com.qiniu.storage.Configuration(Region.huanan());case "beimei":return new com.qiniu.storage.Configuration(Region.beimei());default:throw new RuntimeException("存储区域配置错误");}}/*** 认证信息实例* @return*/@Beanpublic Auth auth() {return Auth.create(accessKey, secretKey);}/*** 构建一个七牛上传工具实例*/@Beanpublic UploadManager uploadManager(com.qiniu.storage.Configuration configuration) {return new UploadManager(configuration);}/*** 构建七牛空间管理实例* @param auth 认证信息* @param configuration com.qiniu.storage.Configuration* @return*/@Beanpublic BucketManager bucketManager(Auth auth, com.qiniu.storage.Configuration configuration) {return new BucketManager(auth, configuration);}/*** Gson* @return*/@Beanpublic Gson gson() {return new Gson();}
}

工具类

package com.lx.qiniu;import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;@Component
public class OssQiNiuHelper {@Value("${oss.qiniu.bucketName}")private String bucketName ;@Value("${oss.qiniu.domain}")private String fileDomain;@Autowiredprivate Configuration configuration;@Autowiredprivate UploadManager uploadManager;@Autowiredprivate BucketManager bucketManager;// 密钥配置@Autowiredprivate Auth auth;@Autowiredprivate Gson gson;//简单上传模式的凭证public String getUpToken() {return auth.uploadToken(bucketName);}//覆盖上传模式的凭证public String getUpToken(String fileKey) {return auth.uploadToken(bucketName, fileKey);}/*** 上传二进制数据* @param data* @param fileKey* @return* @throws IOException*/public DefaultPutRet upload(byte[] data, String fileKey) throws IOException {Response res = uploadManager.put(data, fileKey, getUpToken(fileKey));// 解析上传成功的结果DefaultPutRet putRet = gson.fromJson(res.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);return putRet;}/*** 上传输入流* @param inputStream* @param fileKey* @return* @throws IOException*/public DefaultPutRet upload(InputStream inputStream, String fileKey) throws IOException {Response res = uploadManager .put(inputStream, fileKey, getUpToken(fileKey),null,null);// 解析上传成功的结果DefaultPutRet putRet = gson.fromJson(res.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);return putRet ;}/*** 删除文件* @param fileKey* @return* @throws QiniuException*/public boolean delete(String fileKey) throws QiniuException {Response response = bucketManager.delete(bucketName, fileKey);return response.statusCode == 200 ? true:false;}/*** 获取公共空间文件* @param fileKey* @return*/public String getFile(String fileKey) throws Exception{String encodedFileName = URLEncoder.encode(fileKey, "utf-8").replace("+", "%20");String url = String.format("%s/%s", fileDomain, encodedFileName);return url;}/*** 获取私有空间文件* @param fileKey* @return*/public String getPrivateFile(String fileKey) throws Exception{String encodedFileName = URLEncoder.encode(fileKey, "utf-8").replace("+", "%20");String publicUrl = String.format("%s/%s", "http://"+fileDomain, encodedFileName);long expireInSeconds = 3600;//1小时,可以自定义链接过期时间String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);return finalUrl;}
}

controller

package com.lx.controller;import com.lx.qiniu.OssQiNiuHelper;
import com.lx.web.ResultJson;
import com.qiniu.storage.model.DefaultPutRet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;@RestController
@RequestMapping("qiniu")
public class OssController {&#64;Autowiredprivate OssQiNiuHelper ossQiNiuHelper;&#64;Value("${oss.qiniu.domain}")private String fileDomain;/*** 七牛云文件上传** &#64;param file 文件* &#64;return*/&#64;PostMapping(value &#61; "/upload")public ResultJson upload(MultipartFile file) {if (file &#61;&#61; null) {return ResultJson.fail("上传文件不能为空");}try {FileInputStream fileInputStream &#61; (FileInputStream) file.getInputStream();String originalFilename &#61; file.getOriginalFilename();String fileExtend &#61; originalFilename.substring(originalFilename.lastIndexOf("."));String yyyyMMddHHmmss &#61; new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//默认不指定key的情况下&#xff0c;以文件内容的hash值作为文件名String fileKey &#61; UUID.randomUUID().toString().replace("-", "") &#43; "-" &#43; yyyyMMddHHmmss &#43; fileExtend;Map map &#61; new HashMap<>();DefaultPutRet uploadInfo &#61; ossQiNiuHelper.upload(fileInputStream, fileKey);map.put("fileName", uploadInfo.key);map.put("originName", originalFilename);map.put("size", file.getSize());//七牛云文件私有下载地址&#xff08;看自己七牛云公开还是私有配置&#xff09;map.put("url", "http://"&#43;fileDomain&#43;"/"&#43; uploadInfo.key);return ResultJson.ok(map);} catch (Exception e) {e.printStackTrace();return ResultJson.fail(e.getMessage());}}/*** 七牛云私有文件下载** &#64;param filename 文件名* &#64;return*/&#64;GetMapping(value &#61; "/private/file/{filename}")public void privateDownload(&#64;PathVariable("filename") String filename, HttpServletResponse response) {if (filename.isEmpty()) {return;}try {String privateFile &#61; ossQiNiuHelper.getPrivateFile(filename);response.sendRedirect(privateFile);} catch (Exception e) {e.printStackTrace();}}/*** 七牛云文件下载** &#64;param filename 文件名* &#64;return*/&#64;RequestMapping(value &#61; "/file/{filename}",method &#61; {RequestMethod.GET})public void download(&#64;PathVariable("filename") String filename, HttpServletResponse response) {if (filename.isEmpty()) {return;}try {String privateFile &#61; ossQiNiuHelper.getFile(filename);response.sendRedirect("http://"&#43;privateFile);} catch (Exception e) {e.printStackTrace();}}
}

结果集

package com.lx.web;import lombok.Data;&#64;Data
public class ResultJson {private final static int OK &#61; 200;private final static int ERR &#61; 500;private int code;private String msg;private Object data;private ResultJson(int code, String msg, Object data) {this.code &#61; code;this.msg &#61; msg;this.data &#61; data;}public static ResultJson ok(String msg, Object data){return new ResultJson(OK,msg,data);}public static ResultJson ok(Object data){return ok(null,data);}public static ResultJson ok(){return ok(null,null);}public static ResultJson fail(String msg,Object data){return new ResultJson(ERR,msg,data);}public static ResultJson fail(Object data){return ok(null,data);}public static ResultJson fail(){return ok(null,null);}
}

html





七牛Oss

文件上传测试


文件下载测试






测试结果

上传


下载



推荐阅读
author-avatar
手机用户2502859707
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有