Почему django не загружает файлы, содержащие определенные символы, в s3? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть приложение Django, которое позволяет пользователям загружать csv файлы в AWS S3 Bucket.Предположим, что я хочу загрузить файл с именем 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})
...