文件上传,下载,查询,删除以及预览

本人项目中的一个页面,涉及文档上传,下载,预览,删除以及查询五个接口以及效果展示。

该组件库用的是Ant Design of Vue 详请看这:https://1x.antdv.com/docs/vue/introduce-cn/

先提前陈述一下,我的后端用的是minio进行文件的上传,以及kkfile进行文件预览,上传和下载的话用的是同一个filed,下面就开始上代码展示。

首先是文件的上传,本人这就做了单文件上传,如果想一次上传两个或多个也可以,就是同时多发几次请求。

            <a-upload
              name="file"
              :multiple="true"
              :customRequest="determine"
              :action="uploadUrl"
              :headers="headers"
              :showUploadList="false"
             >
              <a-button type="primary" style="margin-left: 80px;">上传文件</a-button>
            </a-upload>

接下来是script中的代码展示

    //文档上传请求 弹窗确定按钮
    determine(request){
      let form = new FormData();
      form.append("file", request.file);
      form.append("orgCode",7);
      form.append("equipmentId", '');
      Uploadocument(  
          form
        ).then(res=>{
          console.log(res);
          this.datashuju()
        }).catch(err=>{
          console.log(err)
        })
    },

接下来是文件的下载,预览和删除,这三个功能是利用插槽放到table里的操作功能栏里的,所以一次性贡献代码;

<a-table 
      :columns="columns"
      :data-source="datalist"
      :bordered="true"
      :pagination="{ pageSize: 5 }"
      :scroll="{ y: 360 }"
       >
 <!-- 操作里的删除和下载 -->
   <template #name="{ record }" slot-scope="text, record">    
        <a-button type="primary" size="small" ghost @click="btndelt(record)">删除</a-button>
        <a-button type="primary" size="small" ghost @click="btn_filedown(record)">下载</a-button>
        <a-button type="primary" size="small" ghost @click="geturl(record)" >预览</a-button>
  </template>
</a-table>

接下来是script中的代码片段:

删除的话是直接从数据库删掉文件

    //删除
    btndelt(record){
      Deldocument(record.fileId).then(res=>{
        console.log(res);
        this.datashuju()
      })
    },

下载:通过根据上传的filed进行文件的下载。

    // 文件下载
    btn_filedown(record){
      // 需要用所需下载的id进行文件的下载
      Filedown(record.fileId).then(res=>{
        console.log(res);
        // 创建a标签
        const elink = document.createElement('a')
        elink.download = record.fileName
        elink.style.display = 'none'
        // 获取文件下载的地址
        elink.href = URL.createObjectURL(new Blob([res.data]))
        document.body.appendChild(elink)
        elink.click()
        document.body.removeChild(elink)
      }).catch(error=>console.log(error))
    },

查询的功能只需要调用接口,因为页面的表格里打开页面就有数据,所有需要在created里调用查询这个事件

 //让表格的数据在页面加载出来就渲染
created(){
      this.datashuju()
      },
    // 表格获取的数据
  datashuju(){
      Checkdocument(this.searchFileParam).then((res)=>{
        this.datalist = res.items;
      }) 
   },
    // 查询文档
    onSearch(){
      this.searchFileParam.fileType = this.file_type
      this.searchFileParam.fileId = this.file_ID
      this.searchFileParam.fileName = this.file_name
      this.datashuju()
    },

文档的预览是利用后端的kkfile,所以会给前端提供一个window.ope的方法使用,预览的话是打开一个新窗口,代码如下:

此处还需要前端下载base64包并引入:

npm install --save js-base64
//在当前的页面进行引入
import { Base64 } from 'js-base64';
//获取预览链接
geturl(record){
   Previewdocument(record.fileId).then((res)=>{
    window.open('http://项目的Ip地址:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(res)));
      })
    },

最后放上几个接口功能里所有的定义的数据(都是后端必传的参数和字段):

  data() {
    return {
      file_type:'',
      file_name:'',
      file_ID:'',
      collapsed: false,
      bordered:false,
      equipmentId:"",
      file:"",
      programId:"",
      filed:'',
      fileId:'',
      isShow:false,
      id:'',
      // 上传文件使用
      headers: {
        authorization: 'authorization-text',
      },
      // 搜索查询-输入框
      searchName:'',//v-model
      // 参数  这里是查询条件
      searchFileParam:{
        endTime: "",
        fileType: "",
        filed: "",
        fileName:"",
        fileId:"",
        pageNum: 1,  
        pageSize: 20,
        orgCode: 7,
        startTime: "",
      },
      datalist:[],
  };
  },

最后说一下,如果后端用的是minio 和kkfile,上面的方法一定有效,但是必须让后端起着后台的项目,否则功能就会失效。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastDFS 是一个开源的轻量级分布式文件系统,它主要解决了海量文件存储问题,具有高性能、高可靠性、易扩展性等特点。下面介绍一下 FastDFS 的文件上传删除预览操作。 1. 文件上传 FastDFS 的文件上传分为两步,第一步是上传文件到 FastDFS 服务器,第二步是保存文件元数据到数据库中。 上传文件到 FastDFS 服务器: ```python import os from fdfs_client.client import Fdfs_client # 定义 FastDFS 配置文件路径 FDFS_CLIENT_CONF = '/etc/fdfs/client.conf' # 创建 Fdfs_client 对象 client = Fdfs_client(FDFS_CLIENT_CONF) # 上传本地文件 ret = client.upload_by_filename('/path/to/local/file') if ret.get('Status') == 'Upload successed.': # 获取文件 ID file_id = ret.get('Remote file_id') else: # 上传失败 file_id = None ``` 保存文件元数据到数据库中: ```python from sqlalchemy.orm import sessionmaker from models import File from database import engine # 创建数据库连接 Session = sessionmaker(bind=engine) session = Session() # 创建文件对象并保存到数据库中 file = File(file_id=file_id, filename='example.txt', size=os.path.getsize('/path/to/local/file')) session.add(file) session.commit() ``` 2. 文件删除 FastDFS 的文件删除也分为两步,第一步是删除 FastDFS 服务器上的文件,第二步是从数据库中删除文件元数据。 删除 FastDFS 服务器上的文件: ```python from fdfs_client.client import Fdfs_client # 创建 Fdfs_client 对象 client = Fdfs_client(FDFS_CLIENT_CONF) # 删除文件 ret = client.delete_file(file_id) if ret == 0: # 删除成功 pass else: # 删除失败 pass ``` 从数据库中删除文件元数据: ```python from sqlalchemy.orm import sessionmaker from models import File from database import engine # 创建数据库连接 Session = sessionmaker(bind=engine) session = Session() # 获取文件对象并从数据库中删除 file = session.query(File).filter_by(file_id=file_id).first() if file: session.delete(file) session.commit() ``` 3. 文件预览 FastDFS 的文件预览需要在客户端下载文件并提供预览功能,具体实现方式根据业务需求而定。例如,可以使用 Flask 框架提供 Web 服务,通过浏览器访问预览页面。 ```python from flask import Flask, send_file from fdfs_client.client import Fdfs_client # 创建 Flask 应用 app = Flask(__name__) # 定义 FastDFS 配置文件路径 FDFS_CLIENT_CONF = '/etc/fdfs/client.conf' @app.route('/preview/<file_id>') def preview(file_id): # 创建 Fdfs_client 对象 client = Fdfs_client(FDFS_CLIENT_CONF) # 下载文件到本地 ret = client.download_to_buffer(file_id) if ret.get('Content') is not None: # 返回文件内容 return send_file(ret.get('Content'), attachment_filename='example.txt') else: # 下载失败 return 'Download failed.' if __name__ == '__main__': app.run() ``` 在浏览器中访问 http://localhost:5000/preview/{file_id} 即可预览文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值