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

SpringBoot+Vue.js實(shí)現(xiàn)前后端分離的文件上傳功能

 更新時(shí)間:2018年06月25日 11:57:01   作者:LuoLiangDSGA  
這篇文章主要介紹了SpringBoot+Vue.js實(shí)現(xiàn)前后端分離的文件上傳功能,需要的朋友可以參考下

這篇文章需要一定Vue和SpringBoot的知識(shí),分為兩個(gè)項(xiàng)目,一個(gè)是前端Vue項(xiàng)目,一個(gè)是后端SpringBoot項(xiàng)目。

后端項(xiàng)目搭建

我使用的是SpringBoot1.5.10+JDK8+IDEA 使用IDEA新建一個(gè)SpringBoot項(xiàng)目,一直點(diǎn)next即可

項(xiàng)目創(chuàng)建成功后,maven的pom配置如下

<dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <!--加入web模塊-->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.39</version>
  </dependency>
 </dependencies>

接下來編寫上傳的API接口

@RestController
@RequestMapping("/upload")
@CrossOrigin
public class UploadController {
 @Value("${prop.upload-folder}")
 private String UPLOAD_FOLDER;
 private Logger logger = LoggerFactory.getLogger(UploadController.class);
 @PostMapping("/singlefile")
 public Object singleFileUpload(MultipartFile file) {
  logger.debug("傳入的文件參數(shù):{}", JSON.toJSONString(file, true));
  if (Objects.isNull(file) || file.isEmpty()) {
   logger.error("文件為空");
   return "文件為空,請(qǐng)重新上傳";
  }
  try {
   byte[] bytes = file.getBytes();
   Path path = Paths.get(UPLOAD_FOLDER + file.getOriginalFilename());
   //如果沒有files文件夾,則創(chuàng)建
   if (!Files.isWritable(path)) {
    Files.createDirectories(Paths.get(UPLOAD_FOLDER));
   }
   //文件寫入指定路徑
   Files.write(path, bytes);
   logger.debug("文件寫入成功...");
   return "文件上傳成功";
  } catch (IOException e) {
   e.printStackTrace();
   return "后端異常...";
  }
 }
}

CrossOrigin注解:解決跨域問題,因?yàn)榍昂蠖送耆蛛x,跨域問題在所難免,加上這個(gè)注解會(huì)讓Controller支持跨域,如果去掉這個(gè)注解,前端Ajax請(qǐng)求不會(huì)到后端。這只是跨域的一種解決方法,還有其他解決方法這篇文章先不涉及。
MultipartFile:SpringMVC的multipartFile對(duì)象,用于接收前端請(qǐng)求傳入的FormData。

PostMapping是Spring4.3以后引入的新注解,是為了簡(jiǎn)化HTTP方法的映射,相當(dāng)于我們常用的@RequestMapping(value = "/xx", method = RequestMethod.POST).

后端至此已經(jīng)做完了,很簡(jiǎn)單。

前端項(xiàng)目搭建

我使用的是Node8+Webpack3+Vue2

本地需要安裝node環(huán)境,且安裝Vue-cli,使用Vue-cli生成一個(gè)Vue項(xiàng)目。

 

項(xiàng)目創(chuàng)建成功之后,用WebStorm打開,就可以寫一個(gè)簡(jiǎn)單的上傳例子了,主要代碼如下:

<template>
 <div class="hello">
 <h1>{{ msg }}</h1>
 <form>
  <input type="file" @change="getFile($event)">
  <button class="button button-primary button-pill button-small" @click="submit($event)">提交</button>
 </form>
 </div>
</template>
<script>
 import axios from 'axios';
 export default {
 name: 'HelloWorld',
 data() {
  return {
  msg: 'Welcome to Your Vue.js App',
  file: ''
  }
 },
 methods: {
  getFile: function (event) {
  this.file = event.target.files[0];
  console.log(this.file);
  },
  submit: function (event) {
  //阻止元素發(fā)生默認(rèn)的行為
  event.preventDefault();
  let formData = new FormData();
  formData.append("file", this.file);
  axios.post('http://localhost:8082/upload/singlefile', formData)
   .then(function (response) {
   alert(response.data);
   console.log(response);
   window.location.reload();
   })
   .catch(function (error) {
   alert("上傳失敗");
   console.log(error);
   window.location.reload();
   });
  }
 }
 }
</script>

使用Axios向后端發(fā)送Ajax請(qǐng)求,使用H5的FormData對(duì)象封裝圖片數(shù)據(jù)

測(cè)試

啟動(dòng)服務(wù)端,直接運(yùn)行BootApplication類的main方法,端口8082

 

啟動(dòng)前端,端口默認(rèn)8080,cd到前端目錄下,分別執(zhí)行:

npm install
npm run dev

啟動(dòng)成功后訪問localhost:8080

 

選擇一張圖片上傳,可以看到,上傳成功之后,后端指定目錄下也有了圖片文件

總結(jié)

到這里,一個(gè)前后端分離的上傳demo就做完了,本篇文章是一個(gè)簡(jiǎn)單的demo,只能應(yīng)對(duì)小文件的上傳,后面我將會(huì)寫一篇SpringBoot+Vue實(shí)現(xiàn)大文件分塊上傳,敬請(qǐng)期待。 附上源碼,歡迎star:boot-upload 。

相關(guān)文章

  • java abstract class interface之間的區(qū)別介紹

    java abstract class interface之間的區(qū)別介紹

    含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對(duì)象,abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法
    2012-11-11
  • 2022年最新java?8?(?jdk1.8u321)安裝圖文教程

    2022年最新java?8?(?jdk1.8u321)安裝圖文教程

    這篇文章主要介紹了2022年最新java?8?(?jdk1.8u321)安裝圖文教程,截止2022年1月,官方出的jdk1.8目前已更新到8u321的版本,本文通過圖文并茂的形式給大家介紹安裝過程,需要的朋友可以參考下
    2022-08-08
  • java獲取包下被指定注解的類過程解析

    java獲取包下被指定注解的類過程解析

    這篇文章主要介紹了java獲取包下被指定注解的類過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法

    SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot實(shí)現(xiàn)列表數(shù)據(jù)導(dǎo)出為Excel文件

    SpringBoot實(shí)現(xiàn)列表數(shù)據(jù)導(dǎo)出為Excel文件

    這篇文章主要為大家詳細(xì)介紹了在Spring?Boot框架中如何將列表數(shù)據(jù)導(dǎo)出為Excel文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-02-02
  • springboot bean掃描路徑的實(shí)現(xiàn)

    springboot bean掃描路徑的實(shí)現(xiàn)

    這篇文章主要介紹了springboot bean掃描路徑的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值

    SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值

    這篇文章主要介紹了SpringBoot使用@Value實(shí)現(xiàn)給靜態(tài)變量注入值的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用Idea連接MySQL的詳細(xì)步驟總結(jié)

    使用Idea連接MySQL的詳細(xì)步驟總結(jié)

    今天給大家?guī)淼氖顷P(guān)于IDEA連接數(shù)據(jù)庫的問題,文章圍繞著使用Idea連接MySQL的詳細(xì)步驟展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • 關(guān)于消息中間件RocketMQ的基本概念及功能

    關(guān)于消息中間件RocketMQ的基本概念及功能

    這篇文章主要介紹了關(guān)于消息中間件RocketMQ的基本概念及功能,RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,需要的朋友可以參考下
    2023-05-05
  • Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作完整示例

    Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作完整示例

    這篇文章主要介紹了Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作,結(jié)合完整實(shí)例形式分析了java數(shù)據(jù)結(jié)構(gòu)中棧的定義、以及入棧、出棧、棧是否為空判斷、棧大小計(jì)算、打印棧元素等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

临沧市| 白山市| 小金县| 南靖县| 德庆县| 喜德县| 东安县| 郓城县| 乳山市| 崇明县| 漠河县| 湘西| 和林格尔县| 罗源县| 江西省| 汽车| 惠来县| 东港市| 比如县| 铜山县| 麻城市| 诸暨市| 洪雅县| 星子县| 开化县| 苍南县| 邛崃市| 黔南| 达拉特旗| 美姑县| 景宁| 房产| 麻江县| 保山市| 宁德市| 安阳县| 乐安县| 金寨县| 安塞县| 甘洛县| 庐江县|