首页 > 代码库 > django-jfu 去掉自动改相同文件名

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 )


截图如下:

wKiom1PlBn2C3L0tAALAu9oMoiI465.jpg

.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="http://www.mamicode.com/{{ JQ_OPEN }}=file.thumbnailUrl{{ JQ_CLOSE }}" one rror="this.onerror=null;"http://blog.51cto.com/viewpic.php?refimg=" + this.src=http://www.mamicode.com/‘/static/img/default.jpg‘"

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

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

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