• 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': '3306',
            'charset':'utf8'
        }
    }
  • 相关阅读:
    React
    移动端
    Flask 框架小记
    PyTorch 学习
    CNN 小结
    Django 环境下常用的模型设计
    Linux用户和用户组
    Linux下查看进程的命令输出的内容解释
    linux下配置tomcat开机自启动
    商业智能概述
  • 原文地址:https://www.cnblogs.com/supery007/p/9247006.html
Copyright © 2020-2023  润新知