Vue+Flask实现图片传输功能


Posted in Vue.js onApril 01, 2022

本文实例为大家分享了Vue+Flask实现图片传输功能的具体代码,供大家参考,具体内容如下

完整流程:

1.图片转为formdata 传输到后端
2.后端接收后,确定文件后缀名无误,修改文件名并保存到固定的路径中
3.前端请求图片
4.后端根据图片名字返回图片数据流
5.前端将数据流处理,转为图片

1.Vue上传

<template>
    <div>
        <input type="file" class="file" id ='file'> 
        <input type="submit" @click="uploadClick">
    </div>
</template>
<script>
export default {
   
    data () {
        return {}
    },
    methods:{
        uploadClick(){
            console.log(document.getElementById('file').files[0]);
            var formData = new window.FormData() 
            formData.append('file',document.getElementById('file').files[0])
            upload(formData)
            
        }   
    }
}
</script>

//这是封装的请求
export const upload = (file) => {
  return request({
    url: '/api/uavprp/upload',
    data: file,
    method: 'post',
    headers: { 
      'Content-Type': 'multipart/form-data'
     },
  })
}

2.Flask接收

#请求中获取到上传的图片
a = request.files.get('file')
#限制文件后缀名必须为图片的类型
allowed_filename = set(['png', 'jpg', 'JPG', 'PNG'])
isallowed = '.' in filename and filename.rsplit('.', 1)[1] in allowed_filename
path = basedir + "/image/"  #这里的image是自己创建的保存图片文件夹路径
img_name = change_file_name(a.filename,ImgID)#这是我自己定义的一个方法 为了修改图片的名字为随机生成的唯一ID,同时不修改后缀名
file_path = path + img_name#完整的保存路径加图片名
a.save(file_path)#保存

3.Vue请求图片并转换返回的数据流为图片展示

<template>
    <div>
      <img :src="ferUrl"/>
    </div>
</template>
<script>
export default {
   
    data () {
        return {
            imgUrl: "",
        }
    },
    created(){
        getImg("ImgNXTIP298.jpg").then((res) => {
        this.imgUrl = window.URL.createObjectURL(res.data);//这里请求接收的一定是Blod类型数据
        console.log(this.imgUrl);
      });
    }
}
</script>


//封装的图片请求
export const getImg = (imgID) => {
  return request({
    url: '/api/ferchoosen/getFerImg',
    method: 'get',
    responseType:"blob",
    params: {
      imgID
    }
  })
}

4.Flask接收前端请求返回图片数据流

imgID = request.args["imgID"]
    if imgID == None:
        return output(msg="该图片不存在")
    path = basedir + "/image/"
    image_data = open(os.path.join(path, '%s' % imgID), "rb").read()
    response = make_response(image_data)
    response.headers['Content-Type'] = 'image/png'#返回的内容类型必须修改
    return response

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue实现登陆页面开发实践
May 30 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 #Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 #Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 #Vue.js
vue ref如何获取子组件属性值
Mar 31 #Vue.js
vue如何使用模拟的json数据查看效果
vue+iview实现手机号分段输入框
Mar 25 #Vue.js
Vue3中toRef与toRefs的区别
Mar 24 #Vue.js
You might like
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHP n个不重复的随机数生成代码
2009/06/23 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP的几个常用加密函数
2016/02/03 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
JS中递归函数
2016/06/17 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
python 读写、创建 文件的方法(必看)
2016/09/12 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
如何基于线程池提升request模块效率
2020/04/18 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
北京天润融通.net面试题笔试题
2012/02/20 面试题
UML设计模式笔试题
2014/06/07 面试题
半年思想汇报
2013/12/30 职场文书
高中军训感言400字
2014/02/24 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python