python - 为什么img.thumbnail调整会引发FileNotFoundError [Errno2] No such file directory?
问题描述
我有一个部署在 Heroku 上的 django 博客应用程序,并从 AWS S3 Bucket 提供图像。当用户尝试上传图片时,我们使用 PIL 根据 if 条件缩略图调整尺寸大小(如下面的models.py所示)。
当我尝试更新个人资料图片时,它会抛出可怕的:
FileNotFoundError at /profile/
[Errno 2] No such file or directory: 'profile_pics/0umkn7tybif11.jpg'
错误的回溯还显示了这些关键行:
/app/users/signals.py in save_profile
instance.profile.save()
...
▶ Local vars
/app/users/models.py in save
img.save(self.image.name)
...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/PIL/Image.py in save
fp = builtins.open(filename, "w+b")
...
▶ Local vars
我的models.py文件似乎包含此错误中解决的代码:
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.core.files.storage import default_storage as storage
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, **kwargs):
super().save()
img = Image.open(storage.open(self.image.name))
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.name)
最后,如果我从 models.py 文件中删除以下代码,应用程序将正常运行:
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.name)
似乎 img.save(self.image.name) 没有正确访问 s3 存储桶路径?这是什么原因以及如何正确实施此缩略图大小调整。
解决方案
推荐阅读
- python - 不断收到 TypeError: 'list' object is not callable
- javascript - 如何在 Reactjs 中启用 CORS?
- image - 在 React Native 中找不到图像文件
- ng-zorro-antd - 我必须使用 angular 5 的 Ng-zorro-mobile 版本
- xamarin - xamarin iOS ONLY Plugin.Geolocator 授权错误
- xcode - Xcode Archive 构建失败,反应原生项目
- ios - AKCallbackInstrument midiIn 和回调状态不起作用
- css - 使用自定义 CSS 格式化带有 Wordpress 主题的小部件
- java - 我必须坚持一张地图
> 与 JPA - c# - 重构 .net 核心 API 约定