本文是采取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 图片上传写入磁盘功能的更多相关文章

  1. JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)

    需要解决的问题有:本地图片如何在上传前预览.编辑:最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼 ...

  2. 微信JS图片上传与下载功能--微信JS系列文章(三)

    概述 在前面的文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的图片上传功能进行描述,供大家参考. 图片上传 $(function(){ v ...

  3. js实现图片上传预览功能,使用base64编码来实现

    实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般 ...

  4. UEditor1.4.3.3实现图片上传、删除功能

    1.下载ueditor1.4.3.3 UTF-8的版本 2.新建一个项目,在项目中添加UEditor,把下载好的插件都放在ueditor这个文件夹中,在进行一些基本的配置 3.在根目录下新建一个为in ...

  5. JQ实现图片上传预览功能

    <input type="file" name="img" id="test1"> <img src="&quo ...

  6. 使用ajax,结合jquery,php实现图片上传预览功能

    大致逻辑:点击页面的file,上传图片到指定的php处理图片的文件,处理完成以后,将图片的连接地址返回,JS控制返回的数据,然后将图片动态的展示出来html代码<label> <im ...

  7. HTML+Jquery实现多图片上传预览功能

    HTML:使用input的onchange事件,它一改变就触发事件 <p id="p3"> <input name="File" onchan ...

  8. js实现图片上传预览功能,使用base64编码来实现

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

随机推荐

  1. [收藏转载链接]Opencv部分

    转载自-柳如风-http://www.cnblogs.com/rongfangliu/p/opencvlink.html [收藏夹整理]OpenCV部分   OpenCV中文论坛 OpenCV论坛 o ...

  2. HDU--4768

    题目: Flyer 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 分析:二分.只需要注意到最多只有一个为奇数,则可以首先求出学生获得的总的传单 ...

  3. Android am命令使用

    一.开启Activity.服务.广播 1.开启Activity.服务.广播基础知识 通过adb shell,可以使用activity manager(arm)工具来执行不同的系统操作,如开启一个act ...

  4. python的filter函数的使用方法详解以及使用案例,是否以什么结尾,是否大于什么(判断是True,则留下来)

    1.总共有3个人看电影,有2个人看电影经常说话,我们把他们两个过滤出去 move_people=["gouguoqi","beiye_sb","xiu ...

  5. Vue.js学习笔记(二)

    Vue.js不支持IE8及以下的版本,因为vue使用了IE8无法模拟的ECMAScript5的特性,它支持所有兼容ECMAScript5的浏览器. <!DOCTYPE html> < ...

  6. bzoj千题计划163:bzoj1060: [ZJOI2007]时态同步

    http://www.lydsy.com/JudgeOnline/problem.php?id=1060 以激发器所在节点为根 终止节点一定是叶节点 记录点的子树内最深的终止节点 然后从根往下使用道具 ...

  7. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第八课 调度监听器

    第八课 调度监听器 调度监听器和触发监听器和触发监听器.作业任务监听器非常相似,只是调度监听器在调度器内接收通知事件,而不需要关联具体的触发器或作业任务事件. 跟调度监听器相关的事件,添加作业任务/触 ...

  8. web打印难题—背景不打印的简单不完美解决方案

    web打印在一些开发中是比较常见的需求,最简单的办法是使用css print进行控制:对于一些建议可以参考http://slodive.com/web-development/css-print-pa ...

  9. 【译】第十四篇 Integration Services:项目转换

    本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...

  10. C# FileStream MemoryStream BufferedStream StreamReader StreamWriter

    FileStream读取文件 , array.Length);//读取流中数据把它写到字节数组中file.Close();//关闭流string str =Encoding.Default.GetSt ...