当前位置: 首页 > news >正文

bootstrapvue上传文件并存储到服务器指定路径及从服务器某路径下载文件

前记

第一次接触上传及下载文件,做个总结。

从浏览器上传本地文件

前端

  • 本处直接将input上传放在了button内实现。
  • 主要利用了input的type=“file” 实现上传框。
  • 其中accept可以限制弹出框可选择的文件类型。可限制多种:
:accept="['doc', 'docx']"
  • 示例代码
<b-buttonclass="btn btn-info"onclick="upload.click()"
><input type="file" name="upload" id="upload" ref="file"style="display: none;"  @change="onFileSelected"accept=".png"/>
</b-button>
methods: {onFileSelected() {this.file = this.$refs.file.files[0]const formData = new FormData()formData.append('file', this.file)},
}

注:此处打印formData 显示为空,但实际可以传输,可以打印this.file查看。

  • 也可使用以下代码(即b-form-file官方文件选择):
<template><div><b-form-file v-model="file" @change="onFileSelected"></b-form-file><b-button @click="uploadFile">上传</b-button></div>
</template>
<script>
import axios from 'axios'export default {data() {return {file: null}},methods: {onFileSelected(event) {this.file = event.target.files[0]},uploadFile() {if (!this.file) {return}let formData = new FormData()formData.append('file', this.file)axios.post('/api/upload', formData).then(response => {console.log(response.data)})}}
}
</script>

接口

  • 常用有axios和http
  • http: 使用http传输时,加上了Content-Type,但是一直有问题。后来发现代码中给http包装了下,强转了Content-Type的问题,实际直接使用xhr.send(data)即可
http.post('/upload', formData, {headers: {'Content-Type': 'multipart/form-data'}
})

后端

def upload(request):# 检查是否有文件被上传if 'file' not in request.files:return response.json({'error': 'No file uploaded'}, status=400)# 获取上传的文件对象file = request.files['file'][0]# 检查文件类型是否合法,这里以图片为例if not file.type.startswith('image/'):return response.json({'error': 'Invalid file type'}, status=400)# 定义存储目录和文件名upload_dir = '/path/to/upload/dir'filename = file.name# 创建存储目录(如果不存在)if not os.path.exists(upload_dir):os.makedirs(upload_dir)# 保存文件到指定路径with open(os.path.join(upload_dir, filename), 'wb') as f:f.write(file.body)

引用

vue文件上传功能bootstrap框架
XMLHttpRequest
文件选择(Form File Input)
Vue使用formData类型上传文件

http://www.lryc.cn/news/91882.html

相关文章:

  • Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)
  • C++基础讲解第八期(智能指针、函数模板、类模板)
  • JMeter 测试 ActiveMq
  • 2023年4月和5月随笔
  • 新Linux服务器安装Java环境[JDK、Tomcat、MySQL、Nacos、Redis、Nginx]
  • 精简总结:一文说明软件测试基础概念
  • 通过 Gorilla 入门机器学习
  • 【二叉树】298. 二叉树最长连续序列
  • Matlab论文插图绘制模板第100期—紧凑排列多子图(Tiledlayout)
  • [2.0快速体验]Apache Doris 2.0 日志分析快速体验
  • MySQL学习-数据库创建-数据库增删改查语句-事务-索引
  • 浏览器渗透攻击-渗透测试模拟环境(9)
  • MySQL数据库基础(基础命令详解)
  • 企业培训直播场景下嘉宾连线到底是如何实现的?
  • 五、JSP05 分页查询及文件上传
  • 一起看 I/O | 借助 Google Play 管理中心价格实验,优化定价策略
  • hexview 命令行操作使用说明
  • vue3+element plus,使用分页total修改成中文
  • RPC、HTTP、DSF、Dubbo,每个都眼熟,就是不知道有什么联系?
  • java.security.MessageDigest的用法
  • 3.2 分析特征间的关系
  • Numpy学习
  • IDC机房相电压与线电压的关系
  • chatgpt赋能python:Python如何设置输入的SEO
  • Spring Cloud Alibaba — Nacos 构建服务注册中心
  • 4.2 Spark SQL数据源 - 基本操作
  • 事件相关功能磁共振波谱技术(fMRS)
  • 跨境电商客户服务五步法
  • hadoop环境配置及HDFS配置
  • HTML中 meta的基本应用