requests下载文件并重新上传
import re
import requests
from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile u = "http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+" def match_by_re(str):
pattern = re.compile(u, re.S)
res = pattern.findall(string=str)
if res: return res[0] def get_suffix(url):
res = url.split('.')
return res[-1] def get_name_content_type(url):
suffix = get_suffix(url)
image_suffix = ['BMP', 'JPG', 'JPEG', 'PNG', 'GIF']
text_suffix = ['JSON']
audio_suffix = ['ACT', 'REC', 'AAC', 'SC4', 'DVF', 'MSC', 'WMA', 'MP3', 'WAV']
name = 'temp.{}'.format(suffix)
if suffix.upper() in image_suffix:
return name, 'image/jpeg'
elif suffix.upper() in text_suffix:
return name, 'application/json'
elif suffix.upper() in audio_suffix:
return name, 'audio/mp3' class DownloadTool(): def __init__(self):
self.los = {} def get_stream_data(self, url):
stream_data = self.los.get(url)
return stream_data def stream_download(self, url):
url = match_by_re(url)
stream = self.get_stream_data(url)
if stream:
return stream
r = requests.get(url, stream=True)
self.los[url] = r.content
return r.content def get_file_obj(self, url):
stream = self.stream_download(url)
fd = BytesIO(stream)
name, content_type = get_name_content_type(url)
file_obj = InMemoryUploadedFile(fd, 'url', name, content_type, len(stream), charset='utf-8')
return file_obj
file_obj是Django的上传文件对象,可以作为model表中FileField字段的值
requests下载文件并重新上传的更多相关文章
- xshell下载文件到本地/上传文件到服务器
xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz首先你的Ubuntu需要安装rz.sz(如果没有安装请执行以下命令,安装完的请跳过.其 ...
- 与众不同 windows phone (13) - Background Task(后台任务)之后台文件传输(上传和下载)
原文:与众不同 windows phone (13) - Background Task(后台任务)之后台文件传输(上传和下载) [索引页][源码下载] 与众不同 windows phone (13) ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- ftp 根据特定正则匹配文件名 下载到本地 并且上传文件到ftp java *** 最爱那水货
/** * 建立FTP链接,FTP服务器地址.端口.登陆用户信息都在配置里配置即可. * @throws IOException */ public boolean connectFtp(String ...
- 文件上传和下载(可批量上传)——Spring(三)
在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...
- apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出
用到了apache 的 commons-net-3.0.1.jar 和 log4j-1.2.15.jar 这连个jar包 JAVA 代码如下: package com.bjut.edu.cn.ftp; ...
- 利用Apache commons-net 包进行FTP文件和文件夹的上传与下载
首先声明:这段代码是我在网上胡乱找的,调试后可用. 需要提前导入jar包,我导入的是:commons-net-3.0.1,在网上可以下载到.以下为源码,其中文件夹的下载存在问题:FTPFile[] a ...
- Asp.Net MVC 文件管理Demo(文件展示,上传,下载,压缩,文件重命名等)
之前 ,有想做一个文件管理页面. 参考了 许多资料,终于完成了一个基于Asp.net MVC 的文件管理Demo.界面如下. 一,实现功能及相关技术 文件管理Demo基于Asp.NET MVC , ...
- pikachu 文件包含,上传,下载
一.文件包含 1.File Inclusion(local) 我们先测试一下,选择kobe然后提交 发现url出现变化 可以猜测此功能为文件包含,包含的文件为 file1.php,所以我在此盘符的根目 ...
随机推荐
- oozie 编译与安装
oozie:4.3.1 hadoop 2.7.6 hive编译使用2.0.0参与编译不通过,但是可以指定为1.2.0,编译可以通过,后期不使用hive的action即可(也可以使用,但是可能会出现异 ...
- js闭包的作用
js闭包的用途详解 js闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中.具体怎么理解呢,各位看官请仔细看好下文 我们来看 ...
- Backbone.js源码浅介
终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...
- 《Linux内核设计与实现》第18章读书整理
第十八章.调试 18.1 准备开始 如果bug能重现的话,将会有很大的帮助. 18.2 内核中的bug Bug多种多样,产生的原因可以有无数的原因,表象也变化多端. 从隐藏在源代码中的错误到展现在目击 ...
- A-Softmax的总结及与L-Softmax的对比——SphereFace
A-Softmax的总结及与L-Softmax的对比--SphereFace \(\quad\)[引言]SphereFace在MegaFace数据集上识别率在2017年排名第一,用的A-Softmax ...
- TUANDUIZUOYE
[组队后的项目整体计划安排] - 学习:先学习基础知识,懂得该做什么,后边做边学,在实践中成长: - 项目:根据迭代原则,先完成较简单的功能,而后进攻较难功能,保证项目的最终完成度. 阶段序列 ...
- d3 选择器
一.隔了一段时间没看D3了,好多api又陌生了.武林太大,唯有自强不息. D3 选择器算是学习D3的第一步吧. 跟 学习JQ一样.先熟悉下api,才能够如鱼得水,手到勤来. 二. 选择器 1.选择器 ...
- Windows 下 Docker 的简单学习使用过程之二 Docker For windows
1. Docker For windows 最新版也支持到了 docker ce 18.06 (这个博客的编写时间是 2018.8.17 当时是最新的) 2. 下载安装. 大概500m 左右的安装文件 ...
- android 命令行安装apk
有两种方式可以在android模拟器或真机上使用命令行安装apk 一种是使用adb install命令,网上通常是这种方式 另一种是通过android提供的命令,pm install. 需要先进入an ...
- JS 中的require 和 import 区别
这两个都是为了JS模块化编程使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 调用时间 require是运行时调 ...