为什么Django不将包含特定字符的文件上载到s3?

2024-05-17 18:55:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django应用程序,它允许用户在AWS S3 Bucket上上传csv文件。假设我想将一个名为myfile.csv的文件上传到一个s3 bucket,那么我就可以毫无问题地将它上传到我的bucket上

尽管如此,如果我将完全相同的文件重命名为myfile(1).csv,那么出于某种原因,该文件将不再上传到bucket。有人知道为什么会这样吗?这是我的密码:

forms.py


class CsvForm(forms.ModelForm):

    csv_file = forms.FileField(widget=forms.FileInput(
        attrs= {
            'class': 'form-group',
        }
    ))

    class Meta:
        model = CSVUpload
        fields = ('csv_file', )

    def save(self):
        csvfile = super(CsvForm, self).save()
        return csvfile


    def clean_csv_file(self):
       uploaded_csv_file = self.cleaned_data['csv_file']
       if uploaded_csv_file:
         filename = uploaded_csv_file.name
         if filename.endswith('.csv'):
             return uploaded_csv_file 
         else:
             raise forms.ValidationError("File must be csv")
       else:
        return uploaded_csv_file

型号.py

from converter.storage_backends import CsvStorage
from django.db import models
from django.utils import timezone
import time


class CSVUpload(models.Model):

    csv_file = models.FileField(storage=CsvStorage())

    def __str__(self):
        return self.csv_file

存储\u后端.py

from storages.backends.s3boto3 import S3Boto3Storage 
from django.conf import settings
import boto3
import time

class CsvStorage(S3Boto3Storage):    
    location = settings.AWS_CSV_LOCATION    
    file_overwrite = False

视图.py

def csvtojson(request):
    if request.method == 'POST':
        form = CsvForm(request.POST, request.FILES)
        if form.is_valid():
           form.save()
           return redirect(about)
    else:
        form = CsvForm()
    return render(request, 'fileconverter/csvtojson.html',{'form': form})

Tags: 文件csvfrompyimportselfformreturn