中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么實現一個文件上傳接口

發布時間:2021-08-07 13:53:10 來源:億速云 閱讀:205 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關SpringBoot中怎么實現一個文件上傳接口,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1、先實現一個Controller接口,如下:

package com.lanxuewei.utils.aspect;import com.lanxuewei.utils.interceptor.annotation.AppIdAuthorization;import com.lanxuewei.utils.model.ReturnCodeAndMsgEnum;import com.lanxuewei.utils.model.ReturnValue;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;/** * @author lanxuewei Create in 2018/7/3 20:01 * Description: aop 測試控制器 */@RestController@RequestMapping(value = "/aop")public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @Autowired private TestService testService; /**  * 文件上傳測試接口  * @return  */ @AppIdAuthorization @RequestMapping("/upload") public ReturnValue uploadFileTest(@RequestParam("uploadFile") MultipartFile zipFile) {  return testService.uploadFileTest(zipFile); }}

2、Service接口如下:

package com.lanxuewei.utils.aspect;import org.springframework.web.multipart.MultipartFile;import com.lanxuewei.utils.model.ReturnValue;public interface TestService { public ReturnValue uploadFileTest(MultipartFile zipFile);}

3、Service實現如下:

package com.lanxuewei.utils.aspect;import com.lanxuewei.utils.model.ReturnCodeAndMsgEnum;import com.lanxuewei.utils.model.ReturnValue;import org.apache.commons.io.IOUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.UUID;/** * @author lanxuewei Create in 2018/8/14 10:01 * Description:  */@Servicepublic class TestServiceImp implements TestService { private static final Logger logger = LoggerFactory.getLogger(TestServiceImp.class); @Override public ReturnValue uploadFileTest(MultipartFile zipFile) {  String targetFilePath = "D:\\test\\uploadTest";  String fileName = UUID.randomUUID().toString().replace("-", "");  File targetFile = new File(targetFilePath + File.separator + fileName);  FileOutputStream fileOutputStream = null;  try {   fileOutputStream = new FileOutputStream(targetFile);   IOUtils.copy(zipFile.getInputStream(), fileOutputStream);   logger.info("------>>>>>>uploaded a file successfully!<<<<<<------");  } catch (IOException e) {   return new ReturnValue<>(-1, null);  } finally {   try {    fileOutputStream.close();   } catch (IOException e) {    logger.error("", e);   }  }  return new ReturnValue<>(ReturnCodeAndMsgEnum.Success, null); }}

說明:

1、targetFilePath為文件保存路徑,本人用于測試所以指定路徑,可根據實際情況進行修改。 2、fileName采用UUID生成,保證文件名唯一不重復,但是沒有保留原文件后綴,可通過獲取原文件文件名后,調用lastIndexOf(“.”)獲取文件原后綴加上。 3、IOUtils為org.apache.commons.io.IOUtils,注意別導入錯誤。 4、本文中采用logback日志系統,可根據實際情況修改或刪除。

附上ReturnValue以及ReturnCodeAndMsgEnum類,用于Controller層統一返回前端的model,如下:

package com.lanxuewei.utils.model;import java.io.Serializable;/** * @author lanxuewei Create in 2018/7/3 20:05 * Description: 統一web返回結果 */public class ReturnValue<T> implements Serializable { private static final long serialVersionUID = -1959544190118740608L; private int ret; private String msg; private T data; public ReturnValue() {  this.ret = 0;  this.msg = "";  this.data = null; } public ReturnValue(int retCode, String msg, T data) {  this.ret = 0;  this.msg = "";  this.data = null;  this.ret = retCode;  this.data = data;  this.msg = msg; } public ReturnValue(int retCode, String msg) {  this.ret = 0;  this.msg = "";  this.data = null;  this.ret = retCode;  this.msg = msg; } public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg) {  this(codeAndMsg.getCode(), codeAndMsg.getMsg(), null); } public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg, T data) {  this(codeAndMsg.getCode(), codeAndMsg.getMsg(), data); } public int getRet() {  return this.ret; } public void setRet(int ret) {  this.ret = ret; } public String getMsg() {  return this.msg; } public void setMsg(String msg) {  this.msg = msg; } public T getData() {  return this.data; } public void setData(T data) {  this.data = data; } @Override public String toString() {  return "ReturnValue{" +    "ret=" + ret +    ", msg='" + msg + '\'' +    ", data=" + data +    '}'; }}

package com.lanxuewei.utils.model;/** * @author lanxuewei Create in 2018/7/3 20:06 * Description: web相關接口返回狀態枚舉 */public enum ReturnCodeAndMsgEnum { Success(0, "ok"), No_Data(-1, "no data"), SYSTEM_ERROR(10004, "system error"); private String msg; private int code; private ReturnCodeAndMsgEnum(int code, String msg) {  this.code = code;  this.msg = msg; } public static ReturnCodeAndMsgEnum getByCode(int code) {  ReturnCodeAndMsgEnum[] var1 = values();  int var2 = var1.length;  for(int var3 = 0; var3 < var2; ++var3) {   ReturnCodeAndMsgEnum aiTypeEnum = var1[var3];   if (aiTypeEnum.code == code) {    return aiTypeEnum;   }  }  return Success; } public String getMsg() {  return this.msg; } public int getCode() {  return this.code; }}

Postman發請求返回結果成功,以上代碼只需要uploadFile一個參數即可。

注意事項: application.properties配置文件中可以配置文件上傳相關屬性,配置上傳文件大小限制。 單個文件最大限制:spring.servlet.multipart.max-file-size=50Mb 單次請求最大限制:spring.servlet.multipart.max-request-size=70Mb

總結:本文功能較為簡單,所以有些過程并沒有更細致過程以及規范代碼,比如存放路徑采用項目路徑,新文件名保持和原文件后綴一致等,需要的小伙伴可以根據自己業務進行修改。

續更,總覺得代碼過于隨意了,補充文件上傳獲得文件后綴相關函數

private String getFileSuffix(MultipartFile file) {  if (file == null) {   return null;  }  String fileName = file.getOriginalFilename();  int suffixIndex = fileName.lastIndexOf(".");  if (suffixIndex == -1) { // 無后綴   return null;  } else {     // 存在后綴   return fileName.substring(suffixIndex, fileName.length());  } }

在隨機生成文件名后補充如下代碼即可,如果返回文件后綴不為空則將其加入新產生的文件名中即可:

String fileSuffix = getFileSuffix(zipFile);  if (fileSuffix != null) { // 拼接后綴   fileName += fileSuffix;  }  File targetFile = new File(targetFilePath + File.separator + fileName);

以上就是SpringBoot中怎么實現一個文件上傳接口,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洱源县| 沙田区| 清新县| 赫章县| 米脂县| 叶城县| 专栏| 游戏| 隆德县| 靖江市| 蛟河市| 搜索| 云浮市| 花莲市| 潮安县| 马鞍山市| 阿坝| 嘉义县| 巫溪县| 缙云县| 佛坪县| 东台市| 隆子县| 河曲县| 郯城县| 兴业县| 石嘴山市| 齐河县| 浦县| 临沧市| 图木舒克市| 漳州市| 东明县| 汉沽区| 上虞市| 肥东县| 张家界市| 惠来县| 西昌市| 潮安县| 广丰县|