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

时间:2019-07-09 14:05:47

标签: python django amazon-s3 file-upload django-storage

我有一个Django应用程序,该应用程序允许用户在AWS S3存储桶上上传csv文件。假设我想将一个名为myfile.csv的文件上传到s3存储桶,那么我可以在没有问题的情况下将其上传到存储桶中。

尽管如此,如果我将完全相同的文件重命名为myfile(1).csv,则由于某种原因该文件不再上传到存储桶中。有谁知道为什么会这样吗?这是我的代码:

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

models.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

storage_backends.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

views.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})

0 个答案:

没有答案