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

溫馨提示×

溫馨提示×

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

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

SpringBoot實現文件上傳接口

發布時間:2020-08-24 08:42:36 來源:腳本之家 閱讀:194 作者:lan_xuewei 欄目:編程語言

摘要

公司都是采用SpringBoot作為項目框架,其實SpringBoot和SSM框架很接近,基本上只是將SSM的一些配置項修改為自動配置或者簡單的注解配置就可以了,建議不了解的SpringBoot的朋友們可以了解一下,上手很快,其實文件上傳框架根本沒有多大關系。我只是順便幫SpringBoot打個廣告罷了。

正題

需求:需要實現一個文件上傳的web接口。

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: 
 */
@Service
public 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一個參數即可。

SpringBoot實現文件上傳接口

注意事項: 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);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

麦盖提县| 棋牌| 东丽区| 平陆县| 青海省| 濮阳县| 巴林左旗| 阿勒泰市| 普兰店市| 泾川县| 锡林浩特市| 清远市| 天门市| 贵阳市| 沽源县| 桓台县| 南华县| 甘孜| 石景山区| 江山市| 界首市| 海兴县| 航空| 泰宁县| 外汇| 孝昌县| 榆树市| 咸阳市| 文昌市| 故城县| 阳山县| 隆尧县| 郯城县| 商南县| 射阳县| 余庆县| 英超| 上犹县| 三穗县| 梅河口市| 厦门市|