eladmin 如何实现文件的上传

 前端页面

<template>
    <div class="uploadFile">
        <el-upload :file-list="fileList" :on-change="handleChange" :on-preview="handlePreview" :on-remove="handleRemove"
            :http-request="uploadFile" :auto-upload="false" class="upload" action="string" ref="upload" drag
            :multiple=false>
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
        <el-button style="" size="small" type="success" @click="onSubmit">上传到服务器</el-button>
    </div>
</template>
<script>
import { uploadFile } from "@/utils/api";
export default {
    data() {
        return {
            fileList: [],
            formData: "",
        }
    },
    created() { },
    mounted: function () {
    },
    methods: {
        submitUpload() {
            this.$refs.upload.submit();
        },
        handleRemove(file, fileList) {
            console.log(file, fileList);
        },
        handlePreview(file) {
            console.log(file);
        },
        delFile() {
            this.fileList = [];
        },
        handleChange(file, fileList) {
            this.fileList = fileList;
        },
        //自定义上传文件
        uploadFile(file) {
            //this.formData.append("file", file.file);
        },
        //删除文件
        handleRemove(file, fileList) {
            console.log(file, fileList);
        },
        // 点击文件
        handlePreview(file) {
            console.log(file);
        },
        //保存按钮
        async onSubmit() {
            let formData = new FormData();
            formData.append("file", this.fileList[0].raw);//拿到存在fileList的文件存放到formData中
            //formData.append("title", this.title);
            await hxn3bUploadFile(formData).then(res => {
                this.$message({
                    message: res,
                    type: 'success'
                });
                this.$emit("closeUpload")
            }).catch(
                res => {
                    this.$message({
                        message: res,
                        type: 'error'
                    });
                }
            )
        }
    }
}
</script>
<style scoped>
.uploadFile {
    text-align: center;
}
</style>

 封装api

import requestMultipart from './httpsMultipart'

export function uploadFile(data) {
  return requestMultipart({
    url: '/api/upload',
    method: 'post',
    data
  })
}

 封装https

const requestMultipart = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: Config.timeout 

})

requestMultipart.interceptors.request.use(
  config => {
    if (getToken()) {
      config.headers['Authorization'] = getToken() 
    }
    config.headers['Content-Type'] = "multipart/form-data;charset=utf-8";
    return config
  },
  error => {
    Promise.reject(error)
  }
)

requestMultipart.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
      const reader = new FileReader()
      reader.readAsText(error.response.data, 'utf-8')
      reader.onload = function (e) {
        const errorMsg = JSON.parse(reader.result).message
        Notification.error({
          title: errorMsg,
          duration: 5000
        })
      }
    } else {
      let code = 0
      try {
        code = error.response.data.status
      } catch (e) {
        if (error.toString().indexOf('Error: timeout') !== -1) {
          Notification.error({
            title: '网络请求超时',
            duration: 5000
          })
          return Promise.reject(error)
        }
      }
      console.log(code)
      if (code) {
        if (code === 401) {
          store.dispatch('LogOut').then(() => {
            Cookies.set('point', 401)
            location.reload()
          })
        } else if (code === 403) {
          router.push({ path: '/401' })
        } else {
          const errorMsg = error.response.data.message
          if (errorMsg !== undefined) {
            Notification.error({
              title: errorMsg,
              duration: 5000
            })
          }
        }
      } else {
        Notification.error({
          title: '接口请求失败',
          duration: 5000
        })
      }
    }
    return Promise.reject(error)
  }
)
export default requestMultipart

后端方法 

@PostMapping(具体路径)
public String saveVue(String title,@RequestParam("file") MultipartFile file) throws IOException {
       	//拿到具体文件 file
            return "SUCCESS";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_文和_

感觉对您有用,可以来点鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值