python-Web-django-图片上传

  1. 建路由
  2. 创建方法
  3. 渲染页面
  4. 下载plupload插件。将插件放在项目根目录下的static下
  5. 写页面,引入js,写html
  6. 这个容器:放上传的图片

    当上传后,需要ul里放3要素:

    元素1:隐藏Input:值:图片路径,当点击发布文章时,将此路径提交后台,上传数据库

    元素2:<img src=‘’>显示已上传的图片,给用户观看

    元素3:<span><img src=’del.jpg’> </span>删除图标。为了删除图片

    引入js:ajax把图片资源提交到后台。修改元素:按钮id  url:上传后台图片的路径  拼接htmls

  7. 通过这段js,将图片资源提交到后台 url: ‘/back/article/upload2/‘,
    1.  建路由:/back/article/upload2/
    2. 建方法upload2:将前台提交的资源,生成一张图

删除图片

1 页面上有这样的html :class="delImg"    data-val="/media/add_article_img/267693612471283.jpg"

2 <a href="javascript:;" class="delImg" data-val="/media/add_article_img/267693612471283.jpg"> <img src="/static/images/del.png" width="15"></a>

3 写js:

点击删除按钮,获取删除按钮上的图片路径 ,通过ajax把图片路径提交后台

4 建删除图片路由{% url "back:article/delImg/" %}

5 建方法delImg:

获取图片路径,os.remove(img_new_path)删除图片

utils:

import random
def range_num(num):
    # 定义一个种子,从这里面随机拿出一个值,可以是字母
    seeds = "1234567890"
    # 定义一个空列表,每次循环,将拿到的值,加入列表
    random_num = []
    # choice函数:每次从seeds拿一个值,加入列表
    for i in range(num):
        random_num.append(random.choice(seeds))
    # 将列表里的值,变成四位字符串
    return "" . join(random_num)

settings:

#用户上传的文件配置
MEDIA_ROOT = os.path.join(BASE_DIR,‘media‘)
MEDIA_URL=‘/media/‘

views:

def gbook(request):
    ‘‘‘‘‘‘
    text = request.POST.get(‘text‘)
    img = re.findall(‘<img src="/media/(.*?)" alt=".*?"(.*?)/>‘,text)
        if img == None:
            img = ‘/static/picture/762f99f369ae786f970477feeb3b9d77.jpg‘
from app01.utils import function
import os.path
#pupload上传多图片
def upload2(request):
    print(1)
    img_obj=request.FILES.get("file")#通过前台提交过来的图片资源   img_obj.name  avatar.jpg
    range_num=function.range_num(15)#生成一个15位随机数

    # print(img_obj.name)
    img_type=os.path.splitext(img_obj.name)[1]#.jpg  获取文件名后缀
    new_img_path=os.path.join(settings.MEDIA_ROOT,"add_article_img",range_num+img_type)#E:\ftp\code\www\pro\media\add_article_img\676161546271228.jpg        #/media/add_article_img/123456.jpg

    img_type2 = img_type.replace(".", "")  #png

    # print(new_img_path)
    with open(new_img_path,"wb") as f:
        for line in img_obj:
            f.write(line)

    response={
        "status":1,
        "message":"上传成功",
        ‘file‘:"/media/add_article_img/"+range_num+img_type,
        ‘file_type‘:img_type2
    }
    print(response[‘file‘])
    return HttpResponse(json.dumps(response))

def delImg(request):
    ‘‘‘删除多图‘‘‘
    img_path=request.POST.get(‘path‘)#/media/add_article_img/722264423391172.jpg
    img_name=os.path.split(img_path)[1]#获取图片名称 722264423391172.jpg
    img_new_path=os.path.join(settings.MEDIA_ROOT,"add_article_img",img_name)#E:\ftp\code\www\pro\media\add_article_img\722264423391172.jpg
    if not os.remove(img_new_path):
        response={
            "status":1,
            "message":"删除成功"
        }
        return HttpResponse(json.dumps(response))

html:

<li>
<a id="upload_image_name" src="javascript:;">
<input type="button" value="上传图片">
</a>
<ul id="image_name_list"></ul>
</li>

<script language="JavaScript">
        var msgLayero_upload_image_name;
        var index_upload_image_name;
        var layer_upload_image_name = 1;
        //实例化一个plupload上传对象
        var uploader_upload_image_name = new plupload.Uploader({
            browse_button: ‘upload_image_name‘, //触发文件选择对话框的按钮,为那个元素id
            url: ‘/app01/upload2/‘, //服务器端的上传页面地址
            flash_swf_url: ‘/static/plupload/Moxie.swf‘, //swf文件,当需要使用swf方式进行上传时需要配置该参数
            silverlight_xap_url: ‘/static/plupload/Moxie.xap‘, //silverlight文件,当需要使用silverlight方式进行上传时需要配置该参数
            multipart_params: {
                type: ‘image_name‘,
                csrfmiddlewaretoken: "{{ csrf_token }}"
            },
            resize: {
                width: 800//指定压缩后图片的宽度,如果没有设置该属性则默认为原始图片的宽度
                //height: , //指定压缩后图片的高度,如果没有设置该属性则默认为原始图片的高度
                //crop: false //是否裁剪图片
            },
            filters: {
                max_file_size: ‘4mb‘
            },
            init: {
                //选择文件
                FilesAdded: function (up, files) {
                    //加载层
                    index_upload_image_name = layer.msg(‘上传中...‘, {
                        icon: 16, time: 0,
                        shade: 0.01,
                        success: function (layero, index) {
                            msgLayero_upload_image_name = layero;//是加载层的div
                        }
                    });
                    //layer_upload_image_name = layer.msg(‘上传中...‘, {time: 0}); //不自动关闭
                    uploader_upload_image_name.start();
                },
                UploadProgress: function (up, file) { //上传中,显示进度条
                    var percent = file.percent;
                    msgLayero_upload_image_name.find(‘.layui-layer-content‘).html(‘<i class="layui-layer-ico layui-layer-ico1"></i>上传中...‘ + percent + ‘%‘);

                },//单个文件上传完成
                FileUploaded: function (up, file, responseObject) {
                    console.log($.parseJSON(responseObject.response));//成功回调函数

                    $(‘#image_name_list‘).html(‘‘);
                    var result = $.parseJSON(responseObject.response);
                    if (result.status == 1) {
                        //上传成功
                        var htmls = ‘<li class="img_upload" style="position:relative;margin:0 10px -10px 0;">‘;
                        htmls += ‘<input  type="hidden" name="image_name[]" value="‘ + result.file + ‘">‘; //隐藏域,是为了把图片地址入库。。
                        htmls += ‘   <img src="‘ + result.file + ‘" width="250"  />‘;
                        htmls += ‘<span  style="position:absolute;top:-8px;right:-6px;background-color:#fff;border-radius:10px;"><a href=javascript:; class="delImg" data-val="‘+result.file+‘">&nbsp;<img src="/static/images/del.png" width="15" /></a></span>‘;
                        htmls += ‘</li>‘;

                        $(‘#image_name_list‘).append(htmls);
                        //上传成功的弹出框
                        msgLayero_upload_image_name.find(‘.layui-layer-content‘).html(‘<i class="layui-layer-ico layui-layer-ico1"></i>‘ + result.message);

                    } else {
                        //上传失败的弹出框
                        msgLayero_upload_image_name.find(‘.layui-layer-content‘).html(‘<i class="layui-layer-ico layui-layer-ico2"></i>‘ + result.message);

                    }
                    setTimeout(function () {
                        layer.close(index_upload_image_name);
                    }, 2000);

                },
                //全部文件上传完成
                UploadComplete: function (up, files) {
                    setTimeout(function () {
                        layer.close(index_upload_image_name);
                    }, 2000);
                },
                //返回错误
                Error: function (up, err) {
                    msgLayero_upload_image_name.find(‘.layui-layer-content‘).html(‘<i class="layui-layer-ico layui-layer-ico2"></i>‘ + result.message);
                    setTimeout(function () {
                        layer.close(index_upload_image_name);
                    }, 2000);
                }
            }
        });

        uploader_upload_image_name.init();

    $(document).on(‘click‘, ‘.delImg‘, function () {
        _this=this;
        $.post(‘{% url "app01:delImg" %}‘, {
            path: $(_this).data("val"),
            csrfmiddlewaretoken: "{{ csrf_token }}"
        }, function (json) {
            if (json.status == 1) {
                layer.msg("删除成功", {
                    time: 2000 //2s后自动关闭
                });
               $(_this).parent().parent().remove();
            } else {
                layer.msg("删除失败", {
                    time: 2000 //2s后自动关闭
                });
            }
        }, ‘json‘);
    });

</script>

原文地址:https://www.cnblogs.com/person1-0-1/p/11367510.html

时间: 2025-01-03 04:15:50

python-Web-django-图片上传的相关文章

java web开发 图片上传功能

基本思路在于,配置路径,然后用java I/O的api将图片上传到该目录下. String photoPath =    ServletActionContext.getServletContext().getRealPath("/user/photo/" + username); 这句是获取服务器下的目录+username 而username通过session获取. 这是一个图片上传action的方法: public String execute() throws Exception

Django 图片上传到数据库 并调用显示

环境:Django2.0 Python3.6.4 建立项目,数据库设置,就不说了. 直接上代码: 在models.py中,需要建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继承了FileField字段,本质上是一样的.这里Image.Field的默认max_length=100,我们可以根据需求自己指定.upload_to用于指定上传到哪个路径下. PS: 使用ImageField首先需要装Pillow. 1 pip install Pillow 1 class Tes

web端 图片上传

需要插件:ajaxfileupload.js  commons-fileupload-1.3.1.jarweb端: <form id="saveForm" method="post" enctype="multipart/form-data"> <label>广告图片:</label><input type="file" id="image1" name="

【juincen】Web中图片上传处理 jQuery+Ajax+SpringMVC

今天做项目有个需求,页面上需要上传一个图片,之前解决了一次,没有记下来. 在前台用户先选择一张图片,然后可以预览,再上传,我是这样解决的. 预览: html里面有一个普通的input标签,id:uploadFile <input type="file" id="uploadFile" /> 还有一个可以预览的img标签,这个img现在并没有src属性,id:imgpreview <img width="100" height=&

IOS web网页图片上传问题

用html5编写图片裁切上传,在iphone手机上可能会遇到图片方向错误问题,在此把解决方法和大家分享一下,用到了html5的 FileReader和Canvas,如果还没有接触的同学,先了解一下其方法. //此方法为file input元素的change事件 function change(){ var file = this.files[0]; var orientation; //EXIF js 可以读取图片的元信息 https://github.com/exif-js/exif-js E

django 图片上传 前段+后端

1.前台<form method="post" action="./writerApply" enctype="multipart/form-data"> <br> <input type="text" name="realname" placeholder="真实姓名" class=" rowspace form-control " s

Asp.Net Web Api 图片上传

public string UploadFile()        {            if (Request.Content.IsMimeMultipartContent())            {                //Save file                MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Ser

部署新浪SAE web.py Session及图片上传等问题注意事项

1.以下几条代码解决编码问题 import sysreload(sys)sys.setdefaultencoding('utf-8') 2.图片上传问题 需要开通sina的Storage服务,随便建个什么Domain,注意HTML代码,那个enctype属性一定要写,两个上传图片的控件叫avatar和photo <form action="details" method="post" enctype="multipart/form-data"

django admin后台接入tinymce并且支持图片上传

首先:下载tinymce 地址是https://www.tinymce.com/ 点击download 下载社区版本即可 接着:把压缩包内tinymce目录内的所有文件和文件夹复制到Django项目中static/js目录内: 然后编辑admin文件 class BlogAdmin(admin.ModelAdmin): list_display = ("title", "author", "category", "public_time

Django(十九)文件上传:图片上传(后台上传、自定义上传)、

一.基本设置 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/http/file-uploads/ 1)配置project1/settings.py 因为图片也属于静态文件,所以保存到static目录下. MEDIA_ROOT=os.path.join(BASE_DIR,"static/media") 2)在static目录下创建media目录,再创建应用名称的目录,此例为app1 F:\Test\django-demo\pro