效果

model

class WEIGUI_IMG(Base):
__tablename__ = 'DW_ZHS_D_WEIGUI_IMG' # 表名 id = Column('img_id', String(), primary_key=True)
img_context = Column(LargeBinary)
file_name = Column('file_name', String(), nullable=True)

后台路由

@api.route('/weigui/img', methods=['POST'])
def weigui_img():
img = request.files['file']
# img.save(img.filename)#直接保存为文件
weigui_img = WEIGUI_IMG()
weigui_img.id = str(uuid.uuid1()).replace('-','')
weigui_img.img_context = img.read()
weigui_img.file_name = img.filename
img.close()
db_session.add(weigui_img)
db_session.commit()
return jsonify({'msg': 'success'})

前端代码页面

                <el-form-item label="上传文件">
<el-upload action="http://10.0.0.49:9090/api/v1600/weigui/img" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-remove="handleRemove">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item> <el-dialog :visible.sync="dialogVisible" top="5vh">
<img width="90%" :src="dialogImageUrl" alt="">
</el-dialog>

前端代码js

                dialogImageUrl: '',
dialogVisible: false, handleRemove(file, fileList) {
console.log(file, fileList)
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
}

后续,编辑时取出所存图片

效果

发送请求

后台代码

需指定返回图片类型

@api.route('/weigui/img/<id>')
def weigui_img_by_id(id):
textsql = "select * from dw_zhs_d_weigui_img t where t.img_id = :id"
row = db_session.execute(textsql, {'id': id}).fetchone()
return Response(row.img_context, mimetype="image/jpeg")

返回存进去的excel文件

# 获取excel测试
@api.route('/stream/excel')
def weigui_excel():
obj = db_session.query(WEIGUI_IMG).filter(WEIGUI_IMG.file_name.like('%%%s%%' %'xls')).one()
response = Response(obj.img_context, mimetype='text/csv')
response.headers["Content-Disposition"] = "attachment; filename={}".format('1.xls')
return response

前端js代码

            //显示编辑界面
handleEdit: function (index, row) {
this.editFormVisible = true
this.editForm = Object.assign({}, row)
this.filelist = []
if(row.imgs){
let temp = row.imgs.split(',')
temp.pop()
temp.forEach(obj=>{
this.filelist.push({
name: '1.png',
url: this.imgUrl+'/'+obj
})
})
}
},

前端html代码

        <!--新增界面-->
<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
<el-form :model="addForm" label-width="80px" ref="addForm">
<el-form-item label="企业名称">
<el-select v-model="addForm.company_id" filterable remote reserve-keyword placeholder="请输入企业名" :remote-method="remoteMethod" :loading="selectLoading" style="width: 250px">
<el-option v-for="item in options" :key="item.code" :label="item.name" :value="item.code"></el-option>
</el-select>
</el-form-item>
<el-form-item label="违规时间">
<el-date-picker v-model="addForm.weigui_time" style="width: 250px"></el-date-picker>
</el-form-item>
<el-form-item label="违规详情">
<el-input v-model="addForm.detail" auto-complete="off" type="textarea" autosize></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="addForm.remark" auto-complete="off" type="textarea" autosize></el-input>
</el-form-item>
<el-form-item label="文件">
<el-upload :action="imgUrl" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-remove="handleRemove" ref="uploader_add" :on-success="fileUploadAddSuccess">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click.native="addFormVisible = false">取消</el-button>
<el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
</div>
</el-dialog>

python保存文件到数据库的更多相关文章

  1. PHP 合理配置实现文件上传及保存文件到数据库

    合理配置 php.ini 如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_si ...

  2. PostgreSQL保存文件到数据库

    1.CREATE TABLE public.t_file ( id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('t_file_id_seq'::regc ...

  3. C# 保存文件到数据库

    html <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUploa ...

  4. python 保存文件时候, 去除名字中的非法字符

    import re def validateTitle(title): rstr = r"[\/\\\:\*\?\"\<\>\|]" # '/ \ : * ? ...

  5. JAVA上传文件到数据库

    前端代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> &l ...

  6. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  7. [转] 三种Python下载url并保存文件的代码

    原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib ...

  8. python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)

    # python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...

  9. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

随机推荐

  1. Annihilate(SA)

    题目描述 黑暗之主的蜈蚣几乎可以毁灭一切,因此小正方形陷入了苦战…… 小正方形现在需要减弱黑暗之主的攻击. 一个黑暗之主的攻击可以用一个仅有小写字母的字符串表示. 现在黑暗之主向小正方形发动了若干攻击 ...

  2. deque双端队列容器

    //deque双端队列容器 //deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector不同的是, //deque采用的分块线性存储结构来存储数据,每块的大小一般为512字节 ...

  3. BZOJ 4562: [Haoi2016]食物链(拓扑排序)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=4562 一句话题意:给一个DAG,求有多少条不完全相同的链,使链首入度为0,链尾出度为0. ...

  4. pageObject+selenium

    新发现的设计模式,很好用. 参考:https://www.cnblogs.com/xiaofeifei-wang/p/6733753.html

  5. 递归思维判断数组a[N]是否为一个递增数组

    递归的方法:记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束: bool fun( int a[], int n ) { ) { return true; } ) { ] ...

  6. SqlServer查询Excel中的数据

    步骤如下: --1.开启远程查询支持 reconfigure reconfigure --2.链接Excel Microsoft ACE 12.0 OLE DB Provider 读Excel数据(注 ...

  7. Python递归_打印节点信息

    Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

  8. RHCSA考试真题

    2018年 RHCSA考试真题... ------------ 考前需要做的基础 破解root密码 KVM虚拟机与VM虚拟机 主机名:station.domain1.example.comIP地址:1 ...

  9. MySQL数据库优化_索引

    1.添加索引后减少查询需要的行数,提高查询性能 (1) 建表 CREATE TABLE `site_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '自增 ...

  10. 利用curl 实现URL监控

    #curl 命令介绍 curl命令在运维中经常使用,但运维中常用的参数也并不多,因此也是列表如下 -I/--head  显示响应头信息 -m/--max-time <seconds>  访 ...