gpt4 book ai didi

django - Django如何重命名上传的文件?

转载 作者:行者123 更新时间:2023-12-04 01:48:01 34 4
gpt4 key购买 nike

如果从网络浏览器上传文件image.png,一个名为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/')

在 forms.py 中:

from django import forms
from .models import Image

class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ['image']

在 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})

最佳答案

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.

默认情况下,Django 按名称保存对象,但如果具有该名称的对象已经存在,则添加下划线和代码注释中引用的 7 个随机字符

另外,除了此 Django 存储类方法 get_valid_name 之前解析文件名并将所有空格替换为下划线并删除所有非 unicode、alpha、破折号、下划线或点的字符

re.sub(r'(?u)[^-\w.]', '', s)

关于django - Django如何重命名上传的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258191/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com