1.文件上传

前端代码

<el-upload
class="upload-demo"
ref="upload"
:action="actionUrl"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-error="handleError"
:on-success="handleSuccess"
:file-list="fileList"
:auto-upload="false">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
</el-button>
</el-upload>

JS代码

<script type="text/javascript">
new Vue({
el: '#app',
data: {
fileList: [],
actionUrl: site_url + "upload_temp/",
...
},
mounted() {
this.init()
},
methods: {
init() {
...
},
handlePreview() {
console.log(file);
},
handleRemove() {
console.log(file, fileList);
},
handleError() {
this.$message.error('文件上传失败');
},
handleSuccess(res, file, fileList) {
this.$message.success('文件上传成功');
this.addForm.add_file_path = res.data
},
submitUpload(){
this.$refs.upload.submit();
},
...
}
})
</script>

在使用el-upload组件时,会有页面上渲染两个上传按钮,可以使用CSS把原生的上传按钮隐藏起来

input[type="file"] {
display: none;
}

后端代码

import os
import time from django.views.decorators.csrf import csrf_exempt def check_upload_wrapper(func):
def inner(*args, **kwargs):
if not os.path.exists("upload/"):
os.makedirs("upload/")
return func(*args, **kwargs)
return inner @csrf_exempt # 取消csrf认证,可以不使用这个装饰器
@check_upload_wrapper # 装饰器,检查后台是否有`upload/`目录,如果没有则创建
def upload_temp(request):
file_obj = request.FILES.get('file') # 获取上传的文件对象
t = time.strftime('%Y%m%d%H%M%S')
now_file_name = t + '.' + file_obj.name.split('.')[1] # 得到文件在后台的保存名字
file_path = os.path.join('upload', now_file_name)
with open(file_path, "wb") as f:
for line in file_obj.chunks():
f.write(line)
return JsonResponse({'result': True, 'data': file_path}) # 必须要返回文件保存路径

2.文件下载

前端代码

<el-button type="primary" @click="download">下载</el-button>
<script type="text/javascript">
new Vue({
el: '#home',
data: { },
mounted() {
this.init()
},
methods: {
init() { },
download() {
location.href = site_url + 'download/'
}
}
})
</script>

后端代码

from django.utils.encoding import escape_uri_path
from django.http import HttpResponse def download(request):
file_name = u"合并.pdf"
file = open(file_name, 'rb')
response = HttpResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = "attachment;filename*=utf-8''{}".format(escape_uri_path(file_name))
return response

3.PDF文件合并

pdffile1 = open(r'file1.pdf', 'rb')
pdffile2 = open(r'file2.pdf', 'rb') pdf1_reader = PyPDF2.PdfFileReader(pdffile1)
pdf2_reader = PyPDF2.PdfFileReader(pdffile2) # 创建一个pdf文档,这个只是代表pdf文档的值,并没有创建实际的文档。
pdf_writer = PyPDF2.PdfFileWriter() # 将文档一页一页的读入到新的文档
for pagenum in range(pdf1_reader.numPages):
pageobj = pdf1_reader.getPage(pagenum)
pdf_writer.addPage(pageobj) for pagenum in range(pdf2_reader.numPages):
pageobj = pdf2_reader.getPage(pagenum)
pdf_writer.addPage(pageobj) # write方法才能真正生成一个文件
pdfoutputfile = open(u'合并.pdf', 'wb')
pdf_writer.write(pdfoutputfile) pdfoutputfile.close()
pdffile1.close()
pdffile2.close()

4.读取Excel文件

# 读取Excel文件
def read_excel():
# 路径前加 r,读取的文件路径
file_path = r'file1.xlsx' # 文件路径的中文转码
file_path = file_path.decode('utf-8') # 获取数据
data = xlrd.open_workbook(file_path) # 获取sheet,通常为 Sheet1
table = data.sheet_by_name(u'Sheet1) # 获取excel文件的总行数
nrows = table.nrows
# 从第二行开始读取数据
for i in range(1, nrows):
# 读取每一行第一列的数据
value1 = table.cell(i, 0).value.strip()
# 读取每一行第二列的数据
value2 = table.cell(i, 1).value.strip()

5.写入Excel文件

5.1 xlwt 模块写入Excel文件

def write_excel(sheet_name, titles, col1, col2):
f = xlwt.Workbook()
# 添加一个Sheet,名字为 sheet_name 所传的参数
sheet1 = f.add_sheet(sheet_name, cell_overwrite_ok=True)
# 写文件头
for i in range(0, len(titles)):
# i 表示第一行的第 i 列
sheet1.write(0, i, titles[i]) # 从第二行开始写入数据
for i in range(0, len(col1)):
# 向每一行的第1列写入数据
sheet1.write(i + 1, 0, col1[i])
# 向每一行的第2列写入数据
sheet1.write(i + 1, 1, col2[i]) # 第一个参数表示行,从0开始计算
# 第二个参数表示列,从0开始计算
# 第二个参数表示写入的数据
# sheet1.write(1, 3, '2006/12/12') # 第一个参数:合并开始的行
# 第二个参数:合并结束的行(可以一次合并多行)
# 第三个参数:合并开始的列
# 第四个参数:合并结束的列(可以一次合并多行多列)
# 第五个参数:写入的数据
sheet1.write_merge(1, 3, 3, 3, u'打游戏') # 合并列单元格
sheet1.write_merge(4, 10, 3, 4, u'打篮球')
f.save('%s.xls' % sheet_name)

5.2 xlsxwriter 模块写入Excel文件

def write_excel1():
# 新建文件,文件名为: hello.xlsx
workbook = xlsxwriter.Workbook('hello.xlsx')
# 建立sheet,可以传入参数来指定sheet名
worksheet = workbook.add_worksheet(u"任平生") titles = [u"姓名", u"年龄", u"出生日期", u"爱好"]
col1 = [u"张三", u"李四", u"恋习Python", u"小明", u"小红", u"无名"]
col2 = [12, 13, 14, 15, 16, 17] # 写入文件头部
for i in range(len(titles)):
worksheet.write(0, i, titles[i]) # 写入文件内容
for j in range(len(col1)):
# 从第二行开始向每行的第一列写入数据
worksheet.write(j + 1, 0, col1[j])
# 从第二行开始向每行的第二列写入数据
worksheet.write(j + 1, 1, col2[j]) workbook.close()

文件上传与下载,PDF与Excel的操作的更多相关文章

  1. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

  2. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  3. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  4. 七牛云存储 qiniu 域名 回收 文件上传 备份 下载 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改

    写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...

  6. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

  7. linux下如何使用sftp命令进行文件上传和下载

    sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...

  8. 基于hap的文件上传和下载

    序言 现在,绝大部分的应用程序在很多的情况下都需要使用到文件上传与下载的功能,在本文中结合hap利用spirng mvc实现文件的上传和下载,包括上传下载图片.上传下载文档.前端所使用的技术不限,本文 ...

  9. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  10. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

随机推荐

  1. 【BigData】Java基础_构造方法的使用

    需求描述 实现上图需求,根据输入的三个人的信息,分别计算出这个三个客户的平均年龄和最大年龄 涉及知识点: ①构造方法 ②字符串切割 ③对象数组 代码实现 代码结构图: package cn.test. ...

  2. 【Gamma阶段】第七次Scrum Meeting

    冰多多团队-Gamma阶段第七次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 语音输入shell应用:基于pytorch ...

  3. 注意:MagickReadImageBlob() 引发的问题

    今天发现: 如果之前的 mw 已加载了具体的图片数据后,再对这个 mw 进行: MagickReadImageBlob(mw, data, dataLen) 程序运行发生了崩溃. 最后找到原因: Ma ...

  4. Prometheus安装部署说明

    本文主要介绍了如何二进制安装Prometheus.使用 Node Exporter 采集主机信息并使用Grafana来进行图形化的展示. 1. 安装Prometheus Server Promethe ...

  5. [EXP]CVE-2019-1821 Cisco Prime Infrastructure思科未授权远程代码执行漏洞

    CVE-2019-1821 Cisco Prime Infrastructure Remote Code Execution https://srcincite.io/blog/2019/05/17/ ...

  6. Java开发笔记(一百四十五)FXML布局的伸展适配

    前面介绍了FXML的基本格式及其控制器的用法,算是打通了FXML方式的编码流程.程序界面通常保持固定尺寸,不过有时也允许用户拖曳窗口大小,不拖不打紧,一拖就可能坏事.像之前的登录窗口,没拖的时候界面如 ...

  7. day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间

    day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...

  8. 认清楚服务器的真正身份--深入ARP工作原理

    我们知道IP地址是ISP分配给我们的,IP不能作为服务器的唯一的身份,那么服务器真正的身份是什么呢?MAC IP地址直接的通信在底层要转换到MAC直接的通信,那他们如何通信的呢? 1.简介 出场人物: ...

  9. Python列表(list)所有元素的同一操作

    针对很普遍的每个元素的操作会遍历每个元素进行操作. 这里给出了几种写法,列表每个元素自增等数学操作同理: 示例:整形列表ilist加1个数.元素类型转字符串: ilist = [1, 2, 3, 10 ...

  10. WPF矢量字体图标(iconfont)

    原文:WPF矢量字体图标(iconfont) 转载:点击打开链接 步骤: 一.下载添加iconfont文件 二.添加到资源文件夹,并设置不复制,且为资源文件 三.增加FIcon.xaml文件 < ...