上傳文件到七牛雲


  之前有做過通過java上傳文件到七牛雲中去, 忙着忙着又忙忘了寫博客.  從上星期開始堅持寫博客, 系統的整理以前收藏的書簽, 看過的書, 用到過的技能, 知識點了. 整理整理也好, 用到過, 以后再用, 復習的時候可以直接拿來看. 

   java 上傳文件到七牛雲中, 整體來說還是較簡單的. 除了一個坑, 七牛雲的存儲空間緩存問題.  同一個PDF, 同一段代碼上傳到七牛雲上去, 我那個七牛雲上的存儲空間上的PDF一外鏈訪問就會報此文件已損壞. 踩這個坑花了我一下午時間, 剛開始以為是代碼問題, 代碼排查完.  相同代碼放在朋友電腦上跑, 他自己七牛雲創建一個存儲空間上傳, 然后外鏈訪問就ok的.  這時候我猜是七牛雲緩存的原因了.  去七牛雲上找, 在CDN那找到刷新領取, 把我那個存儲空間的外鏈域名刷新一下緩存.  結果就ok了.  如下圖:

 

 還有在一開始弄CDN域名時候可以設置緩存時間, 或者弄好了后, 可以在空間管理那設置, 如下圖

 

 SpringBoot整合七牛雲上傳文件到七牛雲

  pom.xml 配置

<!-- 七牛雲 -->
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>3.3.1</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>qiniu-java-sdk</artifactId>
			<version>7.2.23</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.6.2</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>happy-dns-java</artifactId>
			<version>0.1.4</version>
			<scope>compile</scope>
		</dependency>
    <!-- 這導的是我本地lib下的包 -->
                <dependency>
			<groupId>com.squareup.okio</groupId>
			<artifactId>okio</artifactId>
			<version>1.9.0</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/src/main/resources/lib/okio-    
                                             1.9.0.jar</systemPath>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>2.0.17</version>
		</dependency>    

  application.properties

# 上傳到七牛雲上的文件最大為200Mb
spring.http.multipart.max-file-size=200Mb
spring.http.multipart.max-request-size=1000Mb

  Controller 

//發布接口   要判斷當天是否已上傳過相同的文件
    @RequestMapping(value = "/upload")
    @ResponseBody
    public String upload(@RequestParam("multipartFile") MultipartFile multipartFile,      
                                  HttpServletResponse response, HttpServletRequest request
                         ){
     //前后端分離, 前后端跨域 response.setHeader("Access-Control-Allow-Origin", "*"); String appId = request.getHeader("appId"); cdUseNumberManager.setUseNumber(appId,""); Result result = new Result(); result.setCode(ResultCode.FAIL); String originalFilename = multipartFile.getOriginalFilename(); HBYAppUtils hbyAppUtils = new HBYAppUtils(); try{ String endName = originalFilename.split("\\.")[1]; String name = endName.toLowerCase(); if (!"pdf".equals(name) && !"txt".equals(name)&& !"docx".equals(name) && !"doc".equals(name) && !"xlsx".equals(name) && !"xls".equals(name)) { result.setMessage("上傳格式錯誤,請重新上傳"); return JSONObject.toJSONString(result); } //上傳文件 // String fileName = multipartFile.getOriginalFilename().split("\\.")[0]; hbyAppUtils.uploadFile(multipartFile.getInputStream(),originalFilename); String urlPath = HBYAppUtils.prefix + originalFilename; result.setCode(ResultCode.SUCCESS); result.setMessage("上傳成功"); }catch (Exception e){ System.out.println(e.getMessage()); result.setMessage("系統繁忙,請稍后重試"); return JSONObject.toJSONString(result); } return JSONObject.toJSONString(result); }

   HBYAppUtils

public class HBYAppUtils {
  // Zone為空間的地區
    private static final Configuration cfg = new Configuration(Zone.zone0());    //構造一個帶指定Zone對象的配置類
    private static final UploadManager uploadManager = new UploadManager(cfg);
    //公鑰
    private static final String accessKey = "";
    //私鑰
    private static final String secretKey = "";
    private static final String bucket = "";    //bucket名(空間名稱)
    //默認不指定key的情況下,以文件內容的hash值作為文件名
    //    private static final String key = null;    
    private static final Auth auth = Auth.create(accessKey, secretKey);
  //外鏈域名 public static final String prefix = ""; public static int Guid=100; /** * 上傳文件,並返回地址
    在此拋出異常, 是因為我弄了全局異常處理器 */ public void uploadFile(InputStream file, String fileName) throws Exception { String upToken = auth.uploadToken(bucket); //文件上傳 Response response = uploadManager.put(file, fileName, upToken, null, null); //解析上傳成功的結果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM