码迷,mamicode.com
首页 > 其他好文 > 详细

django-jfu 去掉自动改相同文件名

时间:2014-08-09 02:41:28      阅读:1176      评论:0      收藏:0      [点我收藏+]

标签:django-jfu 自动 命名 覆盖

安装django-jfu请参考:

https://pypi.python.org/pypi/django-jfu


利用django-jfu上传文件,如果遇到相同文件名称会自动加"_"1.jpg后缀,如2d7f977e6b36ec616b4e31a33d988c13_1.jpg,下面我们把这个功能去掉,让它直接覆盖原文件。


文件:views.py

def upload( request ):

    instance.save()

    basename = os.path.basename( instance.file.path )

    file_dict = {

        ‘name‘ : basename,

        ‘size‘ : file.size,

        ‘url‘: settings.MEDIA_URL + basename,

         ‘thumbnailUrl‘: settings.MEDIA_URL + basename,

         ‘deleteUrl‘: reverse(‘jfu_delete‘, kwargs = { ‘pk‘: instance.pk }),

        ‘deleteType‘: ‘POST‘,

         }

    return UploadResponse( request, file_dict )


原来instance.save()这个方法会自动调用django.core.files.storage.FileSystemStorage.get_available_name()方法,我们需要把该方法重写下

在views.py里加入:

from django.core.files.storage import FileSystemStorage

from django.db import models


class OverwriteStorage(FileSystemStorage):

        def get_available_name(self,name):

                if self.exists(name):

                        os.remove(os.path.join(settings.MEDIA_ROOT,name))

                return name


class Photo( models.Model ):

        file = models.FileField( upload_to = "/data/media/",storage=OverwriteStorage())

这里的upload_to目录与settings.MEDIA_ROOT目录保持一致

之所以没有把class Photo单独写到model.py里,是因为model.py里import views from OverwriteStorage的时候会报错,可能是views->model,而modey->views不能相互调动的关系吧。


好了,这样修改后,就会自动覆盖之前的文件名了。


还有update_delete函数也需要修改下,不然删除文件的时候有一个删除不掉。

文件:views.py

def upload_delete( request, pk ):

        success = True

        try:

                instance = Photo.objects.get( pk = pk )

                if os.path.isfile(instance.file.path):

                        os.unlink( instance.file.path )

                instance.delete()

        except Photo.DoesNotExist:

                success = False

        return JFUResponse( request, success )


截图如下:

bubuko.com,布布扣

.tar.gz文件格式可以上传可以修改:

文件:photo_upload_form.html

{% extends ‘jfu/upload_form.html‘ %}

{% block JS_OPTS %}

sequentialUploads: true,

acceptFileTypes: /(\.|\/)(png|gif|jpe?g|tar.gz)$/i

{% endblock %}


server.tar.gz前面有缩略图,可以修改:

文件:upload_form.html

大概304行:

data-gallery><img src="{{ JQ_OPEN }}=file.thumbnailUrl{{ JQ_CLOSE }}" onerror="this.onerror=null;"http://blog.51cto.com/viewpic.php?refimg=" + this.src=‘/static/img/default.jpg‘"

增加一个判断,如果找不到图片,就用默认的。

OK,这个自动添加后缀名的问题,搞了我一整天。

本文出自 “辉太狼” 博客,请务必保留此出处http://fallinlove.blog.51cto.com/382816/1537679

django-jfu 去掉自动改相同文件名,布布扣,bubuko.com

django-jfu 去掉自动改相同文件名

标签:django-jfu 自动 命名 覆盖

原文地址:http://fallinlove.blog.51cto.com/382816/1537679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!