-
2020-11-11 15:15:50
Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块。
当然你也可以利用ftplib从ftp站点下载文件。此外Python还提供了另外一种方法requests。
下面来看看三种方法是如何来下载zip文件的:
方法一:
import urllib
import urllib2
import requests
print "downloading with urllib"
url = "http://www.pythontab.com/test/demo.zip"
print "downloading with urllib"
urllib.urlretrieve(url, "demo.zip")
方法二:
import urllib2
print "downloading with urllib2"
url = "http://www.pythontab.com/test/demo.zip"
f = urllib2.urlopen(url)
data = f.read()
with open("demo2.zip", "wb") as code:
code.write(data)
方法三:
import requests
print "downloading with requests"
url = "http://www.pythontab.com/test/demo.zip"
r = requests.get(url)
with open("demo3.zip", "wb") as code:
code.write(r.content)
看起来使用urllib最为简单,一句语句即可。当然你可以把urllib2缩写成:
f = urllib2.urlopen(url)
with open("demo2.zip", "wb") as code:
code.write(f.read())
以上只做转载备忘,实际是参考这篇
更多相关内容 -
Flask——下载文件接口
2021-02-20 19:51:02文章目录业务背景实现思路项目代码 业务背景 近期用Python-Flask开发项目遇到一个多文件打包下载的业务接口,文件格式有Excel、图片...根据数据库查找到的文件(图片、视频)URL地址下载文件,并存储到第一步生成的文业务背景
- 近期用Python-Flask开发项目遇到一个多文件打包下载的业务接口,文件格式有Excel、图片文件、视频文件打包成zip下载。
- 前端通过接口发送ID,后端通过ID查询数据库相关数据并生成Excel文档、数据库查出图片和视频地址之后下载到服务器、打包成压缩包返回给前端。
实现思路
- 后端根据ID创建文件夹到服务器目录
- 查找数据库数据生成Excel文件,并存储到第一步生成的文件夹内
- 根据数据库查找到的文件(图片、视频)URL地址下载文件,并存储到第一步生成的文件夹内
- 将文件夹打包zip
- 返回给前端
项目代码
- 项目基于Flask
- 篇幅原因只贴出本下载接口业务相关代码
# 添加下载API接口 # Download api.add_resource(Download, "/activities/download/<int:activities_id>")
- 模型类:
# coding: utf-8 # extensions 为自定义模块 from extensions import db import datetime class Activities(db.Model): """ 活动 """ __tablename__ = 'activities' id = db.Column(db.Integer, primary_key=True) # 活动名称 active = db.Column(db.String(64)) # 活动类型 active_type = db.Column(db.String(64)) # 活动持续时间 active_time = db.Column(db.Integer) # 活动对象 active_object = db.Column(db.String(164)) # 描述 description = db.Column(db.String(164)) # 图片 数据库存储格式为: ["url","url"] image = db.Column(db.String(1024)) # 视频 数据库存储格式为: ["url","url"] video = db.Column(db.String(1024)) # 创意 idea_name = db.Column(db.String(164)) # 学习 learn_name = db.Column(db.String(164)) # learn_id learn_id = db.Column(db.String(164)) # 创建时间 create_time = db.Column(db.DateTime, default=datetime.datetime.now) # 修改时间 update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now) # is_del is_delete = db.Column(db.Integer, default=0) # 状态 status = db.Column(db.Integer, default=0)
- 核心代码:
from flask import make_response, send_from_directory import os, zipfile, re, xlsxwriter, requests # PS 数据库使用SQLAlchemy 导入自己的模型类 from models import Activities class Download(Resource): def get(self, activities_id): # 1. 在项目目录内创建static文件夹 path=os.path.abspath(os.path.dirname(os.path.dirname(__file__)))+"/static/" fileDownloadPath = path.replace('\\', '/') filePath = fileDownloadPath+ str(activities_id)+"/" if os.path.exists(filePath): shutil.rmtree(filePath) os.makedirs(filePath) # 2.数据库查找出数据存入excel object = Activities.query.filter(and_(Activities.id == activities_id, Activities.is_delete != 1)).first() # 自定义存储方法 create_workbook(object, filePath+"Active.xlsx") # 3. 存储图片 存储视频 if object.image is not None: imageUrl = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', str(object.image)) if imageUrl is not None: for data in imageUrl: # 自定义文件下载方法 getFile(filePath, data, "Image"+str(imageUrl.index(data))) if object.video is not None: videoUrl = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', str(object.video)) if videoUrl is not None: for data in videoUrl: # 自定义文件下载方法 getFile(filePath, data, "Video" + str(videoUrl.index(data))) # 4. 自定义打包方法 make_zip(filePath, fileDownloadPath+str(activities_id)+".zip") # 5. 返回zip response = make_response( send_from_directory(fileDownloadPath, str(activities_id)+".zip", as_attachment=True)) return response # 生成Excel def create_workbook(object, filePath): # 创建Excel文件,不保存,直接输出 workbook = xlsxwriter.Workbook(filePath) worksheet = workbook.add_worksheet("sheet") title = ["Activity Types", "Activity Details", "Duration Hours", "With Whom", "Description", "Learnings", "Ideas"] worksheet.write_row('A1', title) worksheet.write_row('A2', [str(object.active), str(object.active_type), str(object.active_time), str(object.active_object), str(object.description), str(object.learn_name), str(object.idea_name) ]) workbook.close() # 下载文件 def getFile(filePath, url, fileName): response = requests.get(url).content with open(filePath+fileName+url[-4:], 'wb') as f: f.write(response) print ("Sucessful to download "+fileName) # 打包zip def make_zip(filePath, source_dir): zipf = zipfile.ZipFile(source_dir, 'w') pre_len = len(os.path.dirname(filePath)) for parent, dirnames, filenames in os.walk(filePath): for filename in filenames: pathfile = os.path.join(parent, filename) arcname = pathfile[pre_len:].strip(os.path.sep) zipf.write(pathfile, arcname) zipf.close()
-
java--接口--下载文件--可支持断点续传.rar
2020-06-02 16:19:27java--接口--下载文件--可支持断点续传;可配合我的文章使用; 开箱即用;端口8080;开箱即用;端口8080 -
上传下载文件接口测试
2019-11-15 14:42:01在做接口测试的过程中,我们会遇到需要处理文件上传和下载的情况,我们可以使用Jmeter来完成文件的上传下载处理,本文提供两个小示例来展示如何使用Jmeter完成文件上传和文件下载并保存的功能 首先来看看普通的Http...简介
在做接口测试的过程中,我们会遇到需要处理文件上传和下载的情况,我们可以使用Jmeter来完成文件的上传下载处理,本文提供两个小示例来展示如何使用Jmeter完成文件上传和文件下载并保存的功能
首先来看看普通的Http接口请求的过程:
填写服务器环境信息
填写接口请求方法和接口路径
填写参数信息
发送请求
接受响应
文件处理上传
文件上传的处理完全遵循上述流程,只需要在步骤3中去申明请求的类型是multipart/form-data和相应的Content-Type
multipart/form-data是Http协议规定的一种表单类型,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表明文件类型
Content-Type: 互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息,可以是:
image/gif :gif图片格式
application/pdf :pdf格式
application/msword:Word文档格式
application/octet-stream:二进制流
binary:相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件
示例:上传图片到baidu实现baidu搜图
在HttpSampler里,正常填写请求参数
切换到File Upload 参数页,填写文件路径和MimeType(Content-Type)即可
运行脚本,查看请求数据,图片被以二进制形式的表单参数传递到服务器
成功返回响应结果
文件下载处理文件下载的步骤也和普通的Http请求一样,只不过返回的是二进制的文件流,需要额外添加请求后置处理器去保存文件到本地电脑上,此处可以通过添加BeanshellPostProcessor来实现文件的保存和文件内容的解析。Beanshell是一种Java脚本语言,本示例展示如何把文件下载保存到本地:
发起图片下载请求
添加Beanshell Post Processor,使用内置变量prev获取接口响应数据,并通过Java代码把响应的二进制流保存到本地E盘
运行脚本,查看结果和本地文件
如果想解析文件内容可以使用Java来读取文件并进行值得校验
作 者:Testfan Kitty出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
-
postman导出下载文件接口实例
2021-01-21 11:33:29postman导出下载文件接口实例 场景 有一个导出报表的功能,页面上点击了导出,下载了报表 实例 接口上,点击send and download,选择存放路径,即可完成发送请求并下载展开全文 -
Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题
2020-08-18 21:07:33主要介绍了Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对,本文给大家分享错误原因及解决方法,需要的朋友可以参考下 -
接口文档模板.docx
2020-05-06 12:52:20整理的超详细的接口测试文档,模板,教你怎么分析接口,怎么梳理接口文档整理的超详细的接口测试文档,模板,教你怎么分析接口,怎么梳理接口文档整理的超详细的接口测试文档,模板,教你怎么分析接口,怎么梳理接口... -
JAVA使用浏览器下载文件接口
2018-10-16 14:05:00前端页面调用后台接口,使用浏览器默认下载的方法。 public ResponseEntity<byte[]> test() throws Exception { String Path = "";//要下载的文件路径 File file = new File(Path); ... -
接口测试工具postman(七)下载文件接口
2019-07-08 11:28:18按照一般请求接口,配置好接口地址以及参数,点击Send and Download 按钮,执行请求的同时会下载文件 -
vue 接口请求下载文件
2022-04-28 17:21:30在api文件中的接口定义: export function downLoadFile (q) { return axios({ url: '/file/downLoadFile', method: 'get', params: q, responseType: 'blob' }) } 下载按钮的调用方法: down(id) { ... -
postman测试下载的接口
2021-08-10 19:25:01postman是个很好的测试工具,那怎么测试下载的接口呢,请看下面: 教程: -
springboot 文件下载接口
2021-09-28 10:43:55@GetMapping("/download/{fileName}") @ResponseBody public ResponseEntity downloadFile(@PathVariable(name = "fileName") String ... } 以上的代码可以用来下载文件,fileUploadRootDir 这个变量是文件的存储路径。 -
.Net WebAPI 高速下载文件接口实现
2017-09-30 14:03:54接触WebAPI一年多了,感觉是个承上启下,开创未来的技术。老一辈程序员写接口就像写...在开发的过程中遇到了一些问题,大部分都可通过百度找到解决方案,但是有一个问题却一直没有很好地解决,那就是文件下载速度的问 -
swagger接口下载文件
2021-10-08 17:06:26注意!!!!!!!!!!!!swagger下载的文件是损坏的!!!!!!!!!! 所以在浏览器直接输入一下路径就能下载了 -
Java文件下载,提供前端页面下载、HttpClient接口下载
2020-11-07 16:54:27学习Java的文件上传/下载需要先明白一下几点: 1、下载的资源,有两种: 1)、本地文件:即项目运行时可访问的文件目录,比如,在本机Idea中运行一个 fileServer,...2、下载方式: 就是谁来获取这些“下载文件”,. -
JAVA中的通用文件下载接口
2021-05-28 16:19:06本文记录下JAVA中的通用文件下载接口,记录下。 文章目录概述 概述 /** * 通用下载请求 * * @param filePathName 文件路径 */ @GetMapping("common/download") @ApiOperation(value = "下载接口,传入文件全... -
Jmeter接口测试-文件上传/文件下载
2022-01-07 15:11:26在创建Jmeter脚本之前,首先获取文件上传/下载接口需求(接口文档)或者通过抓包的方式来获取,明确请求链接、请求方法、请求头、请求体、返回数据等信息。 2、文件上传 例如:上传图片 (1)请求头,内容类型... -
SpringMVC框架下文件管理系统RESTful接口
2018-05-12 12:20:47为前段提供操作后台上传的磁盘空间的RESTful接口,主要完成对指定路径的文件列出,新建文件,修改文件,删除文件以及文件夹等基本操作 -
HTML5 File接口在web页面上使用文件下载
2020-09-28 04:09:59File接口提供了与文件相关的信息,并且运行JavaScript在web页面上去访问文件中的内容。接下来通过本文给大家介绍HTML5 File接口在web页面上使用文件下载功能,需要的的朋友参考下 -
Python接口下载文件
2020-06-08 23:01:55#!/usr/bin/env python ...1.按照流的方式进行下载 2.存储在某个文件中 ''' import requests import shutil import time class DownLoadFile(): def readyDatas(self): ''' 准备数据:固定参数 : -
下载文件--接口
2020-07-06 11:22:45@RequestMapping(value = "download",method = RequestMethod.GET) public ResponseEntity<byte[]> download(HttpServletResponse response, ... //预下载文件路径****** String preDownload_path = "//172.1. -
API接口文档模版.zip
2021-07-23 15:29:39非常简洁的API接口文档模版,一看就懂,对接的人看到此文档会觉得开发人员非常友好!下载收藏起来吧 -
springboot文件上传下载
2019-03-31 03:59:33springboot文件上传下载 -
swagger 接口文档
2018-08-26 18:29:10本文整理了 spring boot + jpa+mysql+redis +swagger+yml等技术,实现了微服务restFul 风格的demo,下载即运行[http://localhost:8080/swagger-ui.html 进行文档展示] [http://localhost:8080/user/ma 访问接口] -
jmeter学习笔记 文件下载接口测试
2022-04-01 17:54:12本次测试的是文件下载接口,文件是PDF文档,步骤如下: 1、通过jmeter的录制功能,获取了文件下载接口的地址和参数,和其他的HTTP请求一样的配置 2、执行此接口后,察看结果树,点击下载接口的结果,可以看到... -
前端使用文件流接口下载文档的处理方法
2019-08-29 16:50:06GET方式: func_export(){ let url = "/xxx/xxx/xxx/downloadFile?... // 定义请求完成的处理函数,...注意事项:POST方式的下载,使用axios会导致数据损坏,下载到的文件会发生错误,所以使用原生的XHR来处理 -
Jmeter接口测试之文件上传下载
2018-03-19 12:00:26Jmeter接口测试遇到文件上传下载的接口如何测试?调试成功后的脚本,完全step by step教程,轻松上手 -
CRMEB源码后端接口文档
2020-09-18 10:42:59CRMEB源码后端接口文档,文档标记清晰,md格式,可自由存储,CRMEB系统是一个采用前后端分离开发的新零售商城系统,非常容易二次开发! -
Django上传下载文件接口
2018-12-21 17:26:37背景: 使用Django 文件上传下载接口 1.上传文件接口 1.1 上传文件页面 uploads.html &amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html lang=&quot;en&quot;&amp;...