python实现本地图片上传到服务区
本地图片上传到服务器,其本质上来讲,就是读取本地图片,复制到服务器,并返回服务器url
前端代码,用的form表单提交,form表单中包含两个文件选择表单元素,选择文件,点击提交按钮,提交form表单


服务端代码如下:
def get_path_format_vars():
return {
"year":datetime.now().strftime("%Y"),
"month":datetime.now().strftime("%m"),
"day":datetime.now().strftime("%d"),
"date":datetime.now().strftime("%Y%m%d"),
"time":datetime.now().strftime("%H%M%S"),
"datetime":datetime.now().strftime("%Y%m%d%H%M%S"),
"rnd":random.randrange(100,999),
}
def GetOutputFileInfo(request, path_format, path_format_vars):
# 将保存的文件路径和配置的静态资源连接起来
outputPath = os.path.join(MEDIA_ROOT, path_format) # 这里MEDIA_ROOT是在settings文件中配置的静态资源路径 MEDIA_ROOT = os.path.join(BASE_DIR, "media")
# 拼接文件名
outputFile = "%(basename)s_%(datetime)s_%(rnd)s.%(extname)s"%path_format_vars
outputFile = outputFile.replace("/","_")
# 将文件夹路径和文件名拼接起来,生成带完整路径的文件路径,用于返回给前端
outputPathFormat = os.path.join(path_format, outputFile)
# 文件路径是否存在,如果不存在则创建一个
if not os.path.exists(outputPath):
os.makedirs(outputPath)
outputPath = outputPath.replace("/","\\")
outputPathFormat = outputPathFormat.replace("/","\\")
return(outputPathFormat, outputPath, outputFile)
def UploadFileToServer(request, filePath, file):
try:
# 以二进制格式写入文件
f = open(filePath, "wb")
for chunk in file.chunks():
f.write(chunk)
except Exception as e:
f.close()
return u"写入文件错误{}".format(e.message)
finally:
f.close()
return "success"
def UploadFile(request):
if not request.method == "POST":
return JsonResponse({"error":u"不支持此种请求"}, safe=False)
/** 这里涉及到一个问题,就是多图上传获取图片,一直以来我们都是直接使用get来获取但是如果是多图,你会发现get拿到的永远只有一个,经过debug调试我们可以看到,request.FILES是一个MultiValueDict类型,这种字典类型是特殊定义的,要取得list,需要用getlist方法
**/
files = request.FILES.getlist("upfile")
if len(files) == 0:
return JsonResponse({"error":u"请至少选择一个文件"}, safe=False)
returnInfors = {} # 定义一个字典用来承载返回值
returnInfos["data"] = []
for file in files:
filename = file.name
fileSize = file.size
# 获取不包括后缀的文件名和文件后缀
upload_origin_name, upload_origin_ext = os.path.splitext(filename)
# 自定义允许上传的文件类型
allType = [".png", ".jpg", ".jpeg", ".gif", ".bmp"]
# 判断文件上传类型
if not upload_origin_ext in allType:
return JsonResponse({"error":u"服务器不允许上传%s类型的文件"%upload_origin_ext}, safe = False)
# 判断上传文件的大小
maxSize = 10485760 # 自定义上传文件大小限制10M
if fileSize > maxSize:
return JsonResponse({"error":u"文件大小不能超过%s"}%maxSize)
# 校验做完了,开始正式上传文件
path_format_var = get_path_format_vars() # 获取时间相关参数,用于拼接文件名
path_format_var.update({
"basename":upload_origin_name,
"extname":upload_origin_ext[1:],
"filename":filename
})
# 取得文件输出的路径
outputPathFormat = "forum/images"
outputFormat, outputPath, outputFile = GetOutputFileInfo(request, outputPathFormat , path_format_vars)
# 开始写入文件
state = UploadFileToServer(request, outputPath, outputFile)
# 写完,将结果返回给前端
mediaurl = urljoin(MEDIA_URL, outputFormat) # MEDIA_URL 也是settings文件中配置的静态资源路径 MEDIA_URL = '/media/'
# 将绝对路径返回给前端
abs_url = request.build_absolute_uri(mediaurl)
return_info = {
"url":abs_url,
"original":upload_origin_name,
"type":upload_origin_ext,
"size":fileSize,
"state":state
}
returnInfos["data"].append(return_info)
return JsonResponse(returnInfos)
def GetFileUpload(request):
return UploadFile(request)
python实现本地图片上传到服务区的更多相关文章
- TinyMCE的使用(包括汉化及本地图片上传功能)
TinyMCE我就不多介绍了,这是下载地址:https://www.tinymce.com/download/ 下载下来是英文版,要汉化也很简单.首先去网上随便下载个汉化包,然后把汉化包解压后的lan ...
- 本地图片上传与H5适配知识
最近用到本地图片上传作为API的参数,在网上看了许多,记录一下,以后可能用的着(仅自己记录用,看不清请绕路) function getObjectURL(file) { var url = null ...
- JavaScript实现本地图片上传前进行裁剪预览
本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...
- JS兼容各个浏览器的本地图片上传即时预览效果
JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...
- 【咸鱼教程】本地图片上传。动态GIF表情图生成
本案例参考:http://emoji.decathlon.trustingme.cn/但是实现方式不一样. 教程目录一 head first二 打开本地图片功能三 拖拽和缩放手势,调整图片四 gifj ...
- 本地图片上传到GitHub,MarkDown使用Github图片地址
最近在学习用markdown编辑器,我是直接用有道云笔记编辑的,感觉真的好好用,编辑了一半的博客,可以按样式保存在云笔记中,我再也不会忘记写博客了~~ 但是在编辑博客的时候发现了一个问题,那就是本地图 ...
- DWZ集成的xhEditor编辑器浏览本地图片上传的设置
有关xhEditor的文件上传配置官方文档链接:http://i.hdu.edu.cn/dcp/dcp/comm/xheditor/demos/demo08.html 一.xhEditor图片上传的配 ...
- JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)
需要解决的问题有:本地图片如何在上传前预览.编辑:最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼 ...
- [转]微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
本文转自:http://blog.csdn.net/qq_31383345/article/details/53014610 今天遇到微信小程序的用户头像设置功能,做笔记. 先上gif: 再上代码: ...
随机推荐
- MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据
转自:http://www.maomao365.com/?p=4942 下文主要讲述:重复数据只获取一条的方法 row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号,我们常常 ...
- EOS开发语言和石墨烯技术介绍
EOS 的智能合约基于 WebAssembly(WASM) 技术执行用户生成的应用程序和代码.WASM是一项新兴的网络标准,得到了谷歌,微软,苹果等公司的广泛支持.目前,用于构建编译为WASM的应用程 ...
- tesseract-ocr安装问题
今天安装tesseract-ocr的时候,载了坑,记录一下. 1. 安装时语言库的选择,我把 aditional language data 这一项全选中了,装的时候那叫一个慢啊,差不多3个小时装好的 ...
- 再次理解 C# LINQ
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 查询表达式(生成表达式) 1.IEnumerable<T> 查询编译为委托.如 source.Where( ...
- Java多线程(三)如何创建线程
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- 基于Python的多线程模块Threading小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
- 【Git】Git pull 强制覆盖本地文件
git fetch --all git reset --hard origin/master git pull 备注: git fetch 只是下载远程的库的内容,不做任何的合并 git reset ...
- MyBatis知识点总结(一)
前言:本篇主要记录在MyBatis学习过程中的主要知识点. 1.mybatis环境的搭建,通过maven可以快速的进行环境的搭建. <!--文件版本--> <properties&g ...
- C#编程の泛型编程
什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为 ...
- LDAP概念
1.1.LDAP目录结构 此图为树形目录结构,我将此跳过去了,因为这个是按照“国家这种结构来划分的”.如果你喜欢这样看更好,如下还有一种: 树也可以根据互联网域名组主.这种命名方式正越来越受欢迎, ...