python 图片上传写入磁盘功能
本文是采取django框架,前端上传图片后端接收后写入磁盘,数据库记录图片在磁盘上的路径(相对),以下是前端上传到后端入库的基本流程
一. html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="" method="post" enctype="multipart/form-data">
<p><input type="file" name="image"></p>
<button type="submit" value="提交">提交</button>
</form> </body>
</html>
# 必须要加上 enctype="multipart/form-data" 将文件以二进制的形式上传,这样可以实现多种类型的文件上传
二、后端接收代码
from myweb.FileinfoPlug import file_info
def news_add(request):
if request.method == "GET":
return render(request, 'image-add.html')
else:
input_image = request.FILES.get('image')
image_name = file_info(input_image, 'article')
print(image_name)
models.Image.objects.create(title_img=image_name)
return redirect('/images/')
三、file_info功能代码
#!/bin/env python
# -*- coding: utf-8 -*-
import os
import time, random
from django.conf import settings def file_Path(upload_to):
file_path = os.path.join(settings.BASE_DIR, 'media', upload_to)
if not os.path.exists(file_path):
os.makedirs(file_path)
return file_path def file_info(input_image,dirname=None):
""" :param input_image: 前端传过来的二进制数据
:param dirname: 指定图片上传的目录,比如这里传入的是article,那么格式是 /media/article/images/2018/06/30/20180630133015_94.jpg
:return: 最终如果想展示图片只需在orm取出数据库后加入 http://image.com/+/media/article/images/2018/06/30/20180630133015_94.jpg 拼接一下即可
"""
fn = time.strftime('%Y%m%d%H%M%S')
fn = fn + '_%d' % random.randint(0, 100)
upload_to = time.strftime('images/%Y/%m/%d/')
if dirname != None:
upload_to = time.strftime(dirname+'/images/%Y/%m/%d/')
file_suffix = input_image.name.split('.')[1]
image_name = '{0}{1}.{2}'.format(upload_to, fn, file_suffix)
filename = '{0}{1}{2}.{3}'.format(file_Path(upload_to), os.sep, fn, file_suffix)
with open(filename, 'wb') as f:
f.write(input_image.read())
return image_name
四、最后settings.py配置媒体目录
MEDIA_URL = '/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,'media/')
五、附上数据库的配置(自己好忘怎么配)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbdatabase',
'USER': 'dbusername',
'PASSWORD': 'dbpassword',
'HOST': '192.168.xx.xx',
'PORT': '',
'charset':'utf8'
}
}
python 图片上传写入磁盘功能的更多相关文章
- JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)
需要解决的问题有:本地图片如何在上传前预览.编辑:最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼 ...
- 微信JS图片上传与下载功能--微信JS系列文章(三)
概述 在前面的文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的图片上传功能进行描述,供大家参考. 图片上传 $(function(){ v ...
- js实现图片上传预览功能,使用base64编码来实现
实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般 ...
- UEditor1.4.3.3实现图片上传、删除功能
1.下载ueditor1.4.3.3 UTF-8的版本 2.新建一个项目,在项目中添加UEditor,把下载好的插件都放在ueditor这个文件夹中,在进行一些基本的配置 3.在根目录下新建一个为in ...
- JQ实现图片上传预览功能
<input type="file" name="img" id="test1"> <img src="&quo ...
- 使用ajax,结合jquery,php实现图片上传预览功能
大致逻辑:点击页面的file,上传图片到指定的php处理图片的文件,处理完成以后,将图片的连接地址返回,JS控制返回的数据,然后将图片动态的展示出来html代码<label> <im ...
- HTML+Jquery实现多图片上传预览功能
HTML:使用input的onchange事件,它一改变就触发事件 <p id="p3"> <input name="File" onchan ...
- js实现图片上传预览功能,使用base64编码来实现
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...
随机推荐
- 从function的定义看JavaScript的预加载
在JavaScript中定义一个函数,有两种写法: function ftn(){} // 第一种 var ftn = function(){} // 第二种 有人说,这两种写法是完全等价的.但是在解 ...
- Linux crontab 命令格式与举例
每五分钟执行 */5 * * * * 每小时执行 0 * * * * 每天执行 0 0 * * * 每周执行 0 0 * * 0 每月执行 0 0 1 ...
- 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)
前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...
- 关于maven工程打jar的问题
今天对maven做一些整理,更好的理了下思路: 这个篇博客介绍的还是很详细的: http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.htm ...
- 51NOD 1105 第K大的数
数组A和数组B,里面都有n个整数. 数组C共有n^2个整数,分别是: A[0] * B[0],A[0] * B[1] ...... A[0] * B[n-1] A[1] * B[0],A[1] * B ...
- openstack虚拟机启动过程源码分析
源码版本:H版 以nova-api为起点开始分析! 一.在nova-api进程中进行处理 根据对nova api的分析,当请求发过来的时候,由相应的Controller进行处理,此处如下: nova/ ...
- java.lang.NoClassDefFoundError: org/hibernate/service/ServiceRegistry] 类似问题
使用Hibernate时出现以上错误,在Java Project中运行无误,但是来到Dynamic Web Project中却出现了如下错误: hibernate 报错:java.lang.NoCla ...
- HDU 5446 lucas CRT
n中选m个模M,M为多个素数之积 $n, m, k (1 \leq m \leq n \leq 10^{18}, 1 \leq k \leq 10)$,$M = p_1 · p_2 · · · p_k ...
- HDU 4135 容斥
问a,b区间内与n互质个数,a,b<=1e15,n<=1e9 n才1e9考虑分解对因子的组合进行容斥,因为19个最小的不同素数乘积即已大于LL了,枚举状态复杂度不会很高.然后差分就好了. ...
- openwrt的sysupgrade和factory固件的区别
openwrt的固件一般分两种类型:factory原厂固件.sysupgrade固件 factory多了一些验证的东西,用于在原厂固件的基础上进行升级. 普通家用路由一般不是openwrt固件,如果要 ...