安装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 )
截图如下:
.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
原文:http://fallinlove.blog.51cto.com/382816/1537679