Flu*_*lux 3 django django-uploads
如果image.png从 Web 浏览器image.png上传文件,服务器上的上传目录中将出现一个名为的新文件。
如果我再上传另一个名为image.png(同名)的文件,一个名为的新文件image_aj642zm.png将出现在服务器上的上传目录中。
然后,如果我上传另一个名为image.png(同样名称)的文件,一个名为的新文件image_z6z2BaQ.png将出现在服务器上的上传目录中。
如果上传目录中已经存在具有该名称的文件,Django 使用什么方法来重命名上传的文件?(即额外的_aj642zm和_z6z2BaQ来自哪里?)
常规设置:
在models.py中:
from django.db import models
class Image(models.Model):
image = models.ImageField(upload_to='uploads/')
Run Code Online (Sandbox Code Playgroud)
在forms.py中:
from django import forms
from .models import Image
class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ['image']
Run Code Online (Sandbox Code Playgroud)
在views.py中:
from django.shortcuts import render, redirect
from .forms import ImageForm
def upload_image(request):
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('index')
else:
form = ImageForm()
return render(request, 'upload_file.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
Django 默认存储类方法称为get_available_name
# If the filename already exists, add an underscore and a random 7
# character alphanumeric string (before the file extension, if one
# exists) to the filename until the generated filename doesn't exist.
# Truncate original name if required, so the new filename does not
# exceed the max_length.
Run Code Online (Sandbox Code Playgroud)
Django 默认按名称保存对象,但如果具有该名称的对象已存在,则添加下划线和代码注释中引用的 7 个随机字符
同样作为这个 Django Storage 类方法的补充,get_valid_name 之前解析文件名并用下划线替换所有空格并删除所有不是 unicode、alpha、破折号、下划线或点的字符
re.sub(r'(?u)[^-\w.]', '', s)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3065 次 |
| 最近记录: |