vue 封装文件上传/下载请求方法

1 篇文章 0 订阅

效果图:

在这里插入图片描述

xxx.vue

      <el-descriptions class="margin-top" title="" :column="1" :size="serverPackageFormSize" border>
        <template slot="extra">
            <el-upload
              ref="uploader"
              class="upload-demo"
              action=""
              :limit="1"
              :show-file-list="false"
              :disabled="upload_loading"
              :http-request="replacePackage"
              :on-exceed="handleExceed"
              :file-list="fileList">
              <el-button type="success" v-hasPermi="['printServer:package:upload']" :loading="upload_loading" size="small" >上传</el-button>
            </el-upload>
            <el-button type="primary" size="small" v-hasPermi="['printServer:package:download']" @click="downLoadPackage">下载</el-button>
          

        </template>
        <el-descriptions-item>
          <template slot="label">
            上传人员
          </template>
            {{serverPackageObj.createUserName}}
        </el-descriptions-item>
        <el-descriptions-item>
          <template slot="label">
            上传时间
          </template>
            {{formatDate(serverPackageObj.createTime)}}
        </el-descriptions-item>
        <el-descriptions-item>
          <template slot="label">
            版本号
          </template>
            {{serverPackageObj.version}}
        </el-descriptions-item>
      </el-descriptions>
import {
  downLoadPackage,
  uploadPackage
} from "@/api/user/server.js";
    // 下载数据包
    downLoadPackage(){
      downLoadPackage().then(response => {
        const data = response;
        const fileReader = new FileReader();
        fileReader.onload = () => {
          try {
            // 说明是普通对象数据,后台转换失败
            const jsonData = JSON.parse(fileReader.result)
            if(jsonData.code){
              this.$modal.msgError(jsonData.msg)
            }
          } catch (err) {
            // 解析成对象失败,说明是正常的文件流
            const elink = document.createElement("a");
            elink.href = window.URL.createObjectURL(new Blob([response], {type: `application/zip`}));
            elink.style.display = 'none';
            elink.setAttribute('download', `package_${new Date().getTime()}`);
            document.body.appendChild(elink);
            elink.click();
            URL.revokeObjectURL(elink.href); // 释放URL 对象
            document.body.removeChild(elink);
          } 
        }
        fileReader.readAsText(data)
      }).catch(err => {
        console.log('错误信息:', err)
      })
    },
    // 替换数据包
    replacePackage(item){
      console.log('上传的文件:', item)
      const fd = new FormData()
      fd.append('file', item.file)
      // 开启loding
      this.upload_loading = true
      uploadPackage(fd).then(res => {
          console.log('文件上传结果:', res)
          if(res.code===200){
            this.$modal.msgSuccess('上传成功')
            this.watchServerPackage()
          } else {
            this.$modal.msgError(res.msg)
          }
          this.upload_loading = false
          this.$refs.uploader.clearFiles()
        }).catch(err => {
          console.log('文件上失败:', err)
          this.upload_loading = false
          this.$refs.uploader.clearFiles()
        });
    },

server.js

import { uploadFile } from '@/utils/request'
// 上传数据更新包
export function uploadPackage(data) {
  return uploadFile({
    url: '/printServer/package/file/upload',
    data: data
  })
}
// 下载数据包
export function downLoadPackage() {
  return getFileStream('/printServer/package/file')
}

utils/request.js

// 获取文件流
export function getFileStream(url) {
  return service.get(url, {
    responseType: 'blob'
  }).then(res => {
    return res
  }).catch((r) => {
    console.error(r)

  })
}

// 上传文件
export function uploadFile({url, data}) {
  return service.post(url, data, {
    headers: { 'Content-Type': 'multipart/form-data' }
  }).then(res => {
    return res
  }).catch((r) => {
    console.error(r)
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值