我有一个Django项目,它要求用户使用Addmultipleimagestopost-article。我正在使用django并使用zappa部署它。我知道在Zappa中,页面加载的最大大小是10mb。我有1张后期图片和7张准备图片。当用户添加7个大文件,然后点击提交,我得到下面的错误
HTTP413:负载太大-服务器拒绝处理负载
请求,因为请求实体比服务器大
愿意或能够处理。
有没有一种方法可以一个接一个地添加图像,而不是一次添加所有图像,这样表单就不会中断,我就不会出现上述错误
class Post(models.Model):
user = models.ForeignKey(User, related_name='posts')
title = models.CharField(max_length=250, unique=True)
message = models.TextField()
post_image = models.ImageField(upload_to='post_images/')
def save(self, *args, **kwargs):
im = Image.open(self.post_image)
super(Post, self).save()
output = BytesIO()
basewidth = 700
wpercent = (basewidth / float(im.size[0]))
hsize = int((float(im.size[1]) * float(wpercent)))
im = im.resize((basewidth, hsize))
# after modifications, save it to the output
im.save(output, format='JPEG', quality=40)
output.seek(0)
self.post_image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.post_image.name.split('.')[0], 'image/jpeg',
sys.getsizeof(output), None)
super().save(*args, **kwargs)
然后我有了一个模型,可以在文章中添加多个图像
class Prep (models.Model): #(Images)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='post_prep')
image = models.ImageField(upload_to='post_prep_images/', blank=True, null=True)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
im = Image.open(self.image)
output = BytesIO()
basewidth = 700
wpercent = (basewidth / float(im.size[0]))
hsize = int((float(im.size[1]) * float(wpercent)))
super(Prep, self).save()
im = im.resize((basewidth, hsize))
# after modifications, save it to the output
im.save(output, format='JPEG', quality=300)
output.seek(0)
# change the imagefield value to be the newley modifed image value
self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name.split('.')[0], 'image/jpeg',
sys.getsizeof(output), None)
super(Prep, self).save()
在my views.py中,两个模型合并以创建一个表单
@login_required
def post_create(request):
ImageFormSet = modelformset_factory(Prep, fields=('image', 'image_title', 'image_description'), extra=7, max_num=7,
min_num=2)
if request.method == "POST":
form = PostForm(request.POST or None, request.FILES or None)
formset = ImageFormSet(request.POST or None, request.FILES or None)
if form.is_valid() and formset.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
post_user = request.user
for f in formset.cleaned_data:
try:
photo = Prep(post=instance, image=f['image']
photo.save()
except Exception as e:
break
return redirect('posts:single', username=instance.user.username, slug=instance.slug)
else:
form = PostForm()
formset = ImageFormSet(queryset=Prep.objects.none())
context = {
'form': form,
'formset': formset,
}
return render(request, 'posts/post_form.html', context)