最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)文件上傳接口

 更新時(shí)間:2019年11月30日 08:36:22   作者:lan_xuewei  
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)文件上傳接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

摘要

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

正題

需求:需要實(shí)現(xiàn)一個(gè)文件上傳的web接口。

1、先實(shí)現(xiàn)一個(gè)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 測(cè)試控制器
 */
@RestController
@RequestMapping(value = "/aop")
public class TestController {

 private static final Logger logger = LoggerFactory.getLogger(TestController.class);

 @Autowired
 private TestService testService;

 /**
 * 文件上傳測(cè)試接口
 * @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實(shí)現(xiàn)如下:

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為文件保存路徑,本人用于測(cè)試所以指定路徑,可根據(jù)實(shí)際情況進(jìn)行修改。
2、fileName采用UUID生成,保證文件名唯一不重復(fù),但是沒有保留原文件后綴,可通過獲取原文件文件名后,調(diào)用lastIndexOf(“.”)獲取文件原后綴加上。
3、IOUtils為org.apache.commons.io.IOUtils,注意別導(dǎo)入錯(cuò)誤。
4、本文中采用logback日志系統(tǒng),可根據(jù)實(shí)際情況修改或刪除。

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

package com.lanxuewei.utils.model;

import java.io.Serializable;

/**
 * @author lanxuewei Create in 2018/7/3 20:05
 * Description: 統(tǒng)一web返回結(jié)果
 */
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相關(guān)接口返回狀態(tài)枚舉
 */
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發(fā)請(qǐng)求返回結(jié)果成功,以上代碼只需要uploadFile一個(gè)參數(shù)即可。

注意事項(xiàng): application.properties配置文件中可以配置文件上傳相關(guān)屬性,配置上傳文件大小限制。
單個(gè)文件最大限制:spring.servlet.multipart.max-file-size=50Mb
單次請(qǐng)求最大限制:spring.servlet.multipart.max-request-size=70Mb

總結(jié):本文功能較為簡(jiǎn)單,所以有些過程并沒有更細(xì)致過程以及規(guī)范代碼,比如存放路徑采用項(xiàng)目路徑,新文件名保持和原文件后綴一致等,需要的小伙伴可以根據(jù)自己業(yè)務(wù)進(jìn)行修改。

續(xù)更,總覺得代碼過于隨意了,補(bǔ)充文件上傳獲得文件后綴相關(guān)函數(shù)

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());
 }
 }

在隨機(jī)生成文件名后補(bǔ)充如下代碼即可,如果返回文件后綴不為空則將其加入新產(chǎn)生的文件名中即可:

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java泛型在集合使用與自定義及繼承上的體現(xiàn)和通配符的使用

    Java泛型在集合使用與自定義及繼承上的體現(xiàn)和通配符的使用

    泛型又稱參數(shù)化類型,是Jdk5.0 出現(xiàn)的新特性,解決數(shù)據(jù)類型的安全性問題,在類聲明或?qū)嵗瘯r(shí)只要指定好需要的具體的類型即可。Java泛型可以保證如果程序在編譯時(shí)沒有發(fā)出警告,運(yùn)行時(shí)就不會(huì)產(chǎn)生ClassCastException異常。同時(shí),代碼更加簡(jiǎn)潔、健壯
    2021-09-09
  • Java中的PrintWriter 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中的PrintWriter 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    PrintWriter 是字符類型的打印輸出流,它繼承于Writer。接下來通過本文給大家介紹java中的 PrintWriter 相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • 圖書信息管理java實(shí)現(xiàn)代碼

    圖書信息管理java實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了圖書信息管理java實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringBoot中加密模塊的使用

    SpringBoot中加密模塊的使用

    本文主要介紹了SpringBoot中加密模塊的使用,包括對(duì)稱加密、非對(duì)稱加密和哈希加密等,同時(shí)還會(huì)提供相應(yīng)的代碼示例,感興趣的朋友可以參考一下
    2023-05-05
  • Spring MVC深入學(xué)習(xí)之啟動(dòng)初始化過程

    Spring MVC深入學(xué)習(xí)之啟動(dòng)初始化過程

    最近因?yàn)楣ぷ鞯脑蛟趯W(xué)習(xí)Spring MVC,為了更深入的學(xué)習(xí)Spring MVC,下面這篇文章主要給大家介紹了關(guān)于Spring MVC深入學(xué)習(xí)之啟動(dòng)初始化過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法示例

    Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法示例

    這篇文章主要介紹了Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Swing組件中的文件選擇器JFileChooser的簡(jiǎn)單使用方法,需要的朋友可以參考下
    2017-11-11
  • mybatis-plus使用generator實(shí)現(xiàn)逆向工程

    mybatis-plus使用generator實(shí)現(xiàn)逆向工程

    mybatis-plus-generator在3.5.0以及以后的版本使用新的方式逆向生成代碼,本文主要介紹了mybatis-plus使用generator實(shí)現(xiàn)逆向工程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-05-05
  • Java中eq、ne、ge、gt、le、lt的含義詳細(xì)解釋

    Java中eq、ne、ge、gt、le、lt的含義詳細(xì)解釋

    Java中的比較運(yùn)算符包括eq(等于)、ne(不等于)、ge(大于或等于)、gt(大于)、le(小于或等于)和lt(小于),這些運(yùn)算符在控制流語句和條件語句中用于判斷條件是否滿足,從而決定程序的執(zhí)行路徑,需要的朋友可以參考下
    2024-11-11
  • idea社區(qū)版如何設(shè)置vm?options

    idea社區(qū)版如何設(shè)置vm?options

    這篇文章主要介紹了idea社區(qū)版如何設(shè)置vm?options問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java遠(yuǎn)程調(diào)用組件Feign技術(shù)使用詳解

    Java遠(yuǎn)程調(diào)用組件Feign技術(shù)使用詳解

    Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-11-11

最新評(píng)論

乌拉特前旗| 启东市| 资溪县| 松原市| 五河县| 合作市| 麻江县| 唐山市| 稻城县| 高唐县| 平昌县| 称多县| 大连市| 武陟县| 成都市| 潞西市| 策勒县| 道真| 句容市| 淅川县| 高州市| 遵义市| 湘阴县| 嘉禾县| 太原市| 滦平县| 香港 | 枣强县| 获嘉县| 弥渡县| 乐平市| 乌海市| 门头沟区| 化德县| 合肥市| 上杭县| 东乌| 孟村| 惠安县| 潞西市| 四子王旗|