本文是采取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\': \'3306\',
        \'charset\':\'utf8\'
    }
}

 

版权声明:本文为supery007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/supery007/p/9247006.html