vue使用el-upload實現(xiàn)文件上傳功能
因為我是vue+springboot前后分離,要跨域,就不能用默認的action寫請求地址,我用axios時最困擾的就是怎么拿到那個真實的文件,然后給傳給后臺。
其實可以通過自帶的onchanne觸發(fā)方法獲得文件列表,文件信息中那個raw就是真實的文件。
寫的時候,剛開始我是直接把el-upload里面的button中加了點擊事件,但是每次文件還沒選,就已經(jīng)向后臺發(fā)出請求了,當然傳不過去,于是外面套了個form。
element-ui組件使用可以查看文檔
upload.vue
<template>
? ? <el-form>
? ? ? ?
? ? ? ? <el-form-item label="姓名" prop="name">
? ? ? ? ? ? <el-input v-model="name"></el-input>
? ? ? ? </el-form-item>
? ? ? ?
? ? ? ? <el-form-item>
? ? ? ? ? ? <el-upload ref="upfile"
? ? ? ? ? ? ? ? style="display: inline"
? ? ? ? ? ? ? ? :auto-upload="false"
? ? ? ? ? ? ? ? :on-change="handleChange"
? ? ? ? ? ? ? ? :file-list="fileList"
? ? ? ? ? ? ? ? action="#">
? ? ? ? ? ? ? ? <el-button ?type="success">選擇文件</el-button>
? ? ? ? ? ? </el-upload>
? ? ? ? </el-form-item>
? ? ? ? <el-form-item>
? ? ? ? ? ? <el-button ?type="success" @click="upload">點擊上傳</el-button>
? ? ? ? </el-form-item>
? ? </el-form>
? ??
</template>
<script>
export default {
? ? name:'UploadUi',
? ? data(){
? ? ? ? return{
? ? ? ? ? ? name:'',
? ? ? ? ? ? fileList:[]
? ? ? ? }
? ? },
? ? methods:{
? ? ? ? //通過onchanne觸發(fā)方法獲得文件列表
? ? ? ? ?handleChange(file, fileList) {
? ? ? ? ? ? this.fileList = fileList;
? ? ? ? ? ? console.log(fileList)
? ? ? ? },
? ? ? ? upload(){
? ? ? ? ? ??
? ? ? ? ? ? let fd = new FormData();
? ? ? ? ? ? fd.append("name",this.name);
? ? ? ? ? ? this.fileList.forEach(item=>{
? ? ? ? ? ? ? ? //文件信息中raw才是真的文件
? ? ? ? ? ? ? ? fd.append("files",item.raw);
? ? ? ? ? ? ? ? //console.log(item.raw)
? ? ? ? ? ? })
? ? ? ? ? ? this.$axios.post('/uploadUi',fd).then(res=>{
? ? ? ? ? ? ? ? if (res.data.code === 200) {
? ? ? ? ? ? ? ? ? ? //console.log(res);
? ? ? ? ? ? ? ? ? ? this.$message('上傳成功')
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? this.$message('失敗')
? ? ? ? ? ? ? ? }
? ? ? ? ? ? })
? ? ? ? },
? ? }
}
</script>springboot后臺 uploadController.java
package com.example.demo.controller;
?
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
?
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
?
import com.example.demo.entity.ListParam;
import com.example.demo.entity.MyUser;
import com.example.demo.entity.Result;
?
@RestController
@ResponseBody
@CrossOrigin
@RequestMapping("/api")
public class UploadController {
?? ?
?? ?@PostMapping("/uploadUi")
?? ?public Result upFile(@RequestParam("name")String name,@RequestParam("files") MultipartFile[] files ) {
?? ??? ? System.out.println("開始");
?? ??? ? System.out.println(name);
?? ??? ? if(files != null) {
?? ??? ??? ? for(MultipartFile file : files) {
?? ??? ??? ??? ?String fileName = file.getOriginalFilename();
?? ??? ??? ??? ?System.out.println(fileName);
?? ??? ??? ??? ?try{
?? ??? ??? ??? ??? ?File mkdir = new File("F:\\app\\file");
?? ??? ??? ??? ??? ?if(!mkdir.exists()) {
?? ??? ??? ??? ??? ??? ?mkdir.mkdirs();
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?//定義輸出流,將文件寫入硬盤
?? ??? ??? ??? ??? ? FileOutputStream os = new FileOutputStream(mkdir.getPath()+"\\"+fileName);
?? ??? ??? ??? ? ? ? ?InputStream in = file.getInputStream();
?? ??? ??? ??? ? ? ? ?int b = 0;
?? ??? ??? ??? ? ? ? ?while((b=in.read())!=-1){ //讀取文件?
?? ??? ??? ??? ? ? ? ? ?os.write(b);
?? ??? ??? ??? ? ? ? ?}
?? ??? ??? ??? ? ? ? ?os.flush(); //關(guān)閉流?
?? ??? ??? ??? ? ? ? ?in.close();
?? ??? ??? ??? ? ? ? ?os.close();
?? ??? ??? ??? ? ? ? ?
?? ??? ??? ??? ?}catch(Exception ?e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ??? ?return new Result(401,"失敗");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ? return new Result(200,"成功");
?? ??? ? }else {
?? ??? ??? ? return new Result(401,"文件找不到");
?? ??? ? }
?? ??? ?
?? ?}
?? ?
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue組件實現(xiàn)列表自動無限循環(huán)的方法
最近剛好有個功能需要實現(xiàn)列表的無限循環(huán)滾動,這篇文章主要給大家介紹了關(guān)于vue組件實現(xiàn)列表自動無限循環(huán)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11
vue使用ArcGis?API?for?js創(chuàng)建地圖實現(xiàn)示例
這篇文章主要為大家介紹了vue使用ArcGis?API?for?js創(chuàng)建地圖實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
解決Vue中的生命周期beforeDestory不觸發(fā)的問題
這篇文章主要介紹了解決Vue中的生命周期beforeDestory不觸發(fā)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
el-select 點擊按鈕滾動到選擇框頂部的實現(xiàn)代碼
本文通過實例代碼給大家分享el-select 點擊按鈕滾動到選擇框頂部效果,主要代碼是在visibleChange在這個popper里面找到.el-select-dropdown__list,感興趣的朋友跟隨小編一起看看吧2024-05-05
一文詳解Vue3的watch是如何實現(xiàn)監(jiān)聽的
watch這個API大家都很熟悉,今天這篇文章小編來帶你搞清楚Vue3的watch是如何實現(xiàn)對響應(yīng)式數(shù)據(jù)進行監(jiān)聽的,希望對大家有一定的幫助2024-11-11

