Vue上传文件,不必使用什么element 的uplaod, 也不用什么npm上找的个人写的包,就用原生的Vue加axios就行了, 废话不多说,直接上代码:
html:

<input type="file" value="" id="file" @change="uploadConfig">

注意这里的type是file,就表示是上传文件了

js:

      uploadConfig(e) {
let formData = new FormData();
     let data = JSON.stringify({
        user: "username",
        env: "dev"
      })
        formData.append('file', e.target.files[0]);
     formData.append('data', data); // 上传文件的同时, 也可以上传其他数据
let url = this.$store.state.path + "api/tools/handle_upload_file";
let config = {
headers:{'Content-Type':'multipart/form-data'}
};
this.$axios.post(url,formData, config).then(function (response) {
console.log(response.data) }) }

1. vue里面的axios,如果要用这种方式写,注意请求方式是method, 而不是 type:

this.$axios({
url:this.$store.state.path + "api/tools/handle_upload_file",
method: "POST",    // 这个地方注意
data: formData,
file:e.target.files[0],
processData:false,
contentType:false,
success:(response) => {
console.log("upload_success_response:", response)
}
})

2. 传输文件类型,必须加上请求头:   headers:{'Content-Type':'multipart/form-data'}
3. 注意axios的用法

后端(python):

def handle_upload_file(request):
if request.method == "POST": file = request.FILES.get("file")    # 获取文件要用request.FILES
     data = request.POST.get("data") # 从POST请求中获取其他数据, 提前在formData中定义的
print file for chunk in file.chunks():      # 分块读取二进制文件的方法
print chunk return HttpResponse(json.dumps({"meta": 200, "msg": "ok"}))

关于下载文件, 本质就是创建一个a标签,把文件放在a标签中, 也可以直接把下载按钮写成a标签, 直接跳转到服务器的下载接口, 不过这样会跳转页面

看一个demo

 download(){
let self = this;
let url = self.$store.state.path + "tools/download_file";
let data = JSON.stringify({
user: self.$store.state.username,
file_name: self.plist_file_name
});
console.log("data:", data)
self.$axios(
{
method: "post",
url: url,
data: data,
responseType: "blob", // 指定获取数据的类型为blob
}
).then(
function (response) {
data = response.data;
      // 创建a标签并点击, 即触发下载
       let url = window.URL.createObjectURL(new Blob([data]));
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", self.plist_file_name); document.body.appendChild(link);
link.click()
}
).catch(function (err) {
console.log(err)
}) }

python端代码(Django):

def download_file(request):
if request.method == "POST":
data = json.loads(request.body)
response = {}
file_name = data.get("file_name")
if not file_name:
response["meta"] = {"code": 400}
response["error"] = {"error_msg": "parameter error, no file_path"}
return HttpResponse(json.dumps(response))
file_path = "/tmp/file/" + file_name
file = open(file_path, "rb")
response = HttpResponse(file)
response["Content-Type"] = "application/octet-stream"
response["Content-Disposition"] = "attachment;filename={}".format(file_name)
return response

vue 上传文件 和 下载文件的更多相关文章

  1. Xshell 本地上传、远程下载文件

    1.Xshell登录工具在创建会话的时候,点击最下面的ZMODEM,可以填写下载的路径和加载的路径:2个路径可以一样也可以不一样: 在下载的时候可以下载到相应的路径去.(我设置的是下载前始终询问) 2 ...

  2. Selenium(十一):设置元素等待、上传文件、下载文件

    1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...

  3. vue 上传文件 和 下载文件 面试的时候被问到过

    Vue上传文件,不必使用什么element 的uplaod, 也不用什么npm上找的个人写的包,就用原生的Vue加axios就行了, 废话不多说,直接上代码:html: <input type= ...

  4. vue+上传文件夹

    在做项目开发的时候,上传东西无论文件也好,还是文件夹都需要用到 <input type="file" id="filepicker" name=" ...

  5. svn上传工程之后下载,打开下载之后的工程缺少文件

    当我们把iOS的工程上传到SVN中,当我们再从SVN中下载下来,就会出现错误,这是什么原因呢?我这里出现的错误是找不到文件,后来知道原来是被屏蔽掉了,就是上传的时候不上传某个类型的文件.例如我出错就是 ...

  6. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  7. tp3.2 上传文件及下载文件

    公共方法 UploadFile.class.php() // 开始 , , , ,];];,; ;; ::::::;,) {//文件上传失败 //捕获错误代码$this->error($file ...

  8. C# FileStream进行FTP服务上传文件和下载文件

    定义FileStream类的操作类:操作类名: FtpUpDown 上传文件 /// <summary> /// 上传文件 /// </summary> /// <par ...

  9. Loadrunner上传文件与下载文件脚本

    Loadrunner上传文件与下载文件脚本 一. 上传脚本 Action() { int uploadImgStatus = 0; //获取上传产品图ID web_reg_save_param_ex( ...

随机推荐

  1. JSON.stringify(value[, replacer[, space]])

    1. JSON.stringify(value[, replacer[, space]]);value 必需 对象或数组,需要转换成json字符串的数据replacer 可选 函数或数组space 可 ...

  2. 洛谷 P3601 签到题

    https://www.luogu.org/problemnew/show/P3601 一道关于欧拉函数的题. 读完题目以后我们知道所谓的$aindao(x)=x- \phi (x) $. 对于x小的 ...

  3. Linux-Java安装

    安装 yum -y install java-1.8.0-openjdk* Tomcat安装:到官网http://tomcat.apache.org/,然后找到Tomcat9下载地址 http://m ...

  4. 控制nginx并发链接数量和客户端请求nginx的速率

    一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...

  5. LeetCode之Weekly Contest 101

    前一段时间比较忙,而且做这个对于我来说挺耗时间的,已经间隔了几期的没做总结了,后面有机会补齐.而且本来做这个的目的就是为了防止长时间不做把编程拉下,不在追求独立作出所有题了.以后完赛后稍微尝试下,做不 ...

  6. 【整理】虚拟机和主机ping不通解决办法,虚拟机ping不通外网的解决方法

     检查几个方面: 1.检查虚拟网卡有没有被禁用2.检查虚拟机与物理机是否在一个VMNet中3.检查虚拟机的IP地址与物理机对应的VMNet是否在一个网段4.检查虚拟机与物理机的防火墙是否允许PING, ...

  7. 转载:使用Pandas进行数据匹配

    使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...

  8. 【HIHOCODER 1589】回文子串的数量(Manacher)

    描述 给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不同就算作不同的子串),有多少个是回文字符串? 输入 一个只包含小写字母的字符串S. 对于30%的数据,S ...

  9. L2-006 树的遍历 RTA

    L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树 ...

  10. Linux学习-X Server 配置文件解析与设定

    X server 的配置 文件都是预设放置在 /etc/X11 目录下,而相关的显示模块或上面提到的总总模块,则主要放置在/usr/lib64/xorg/modules . 比较重要的是字型文件与芯片 ...