我有一个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})