【问题标题】:Saving Image File in particular directory in Django Rest Framework将图像文件保存在 Django Rest Framework 中的特定目录中
【发布时间】:2020-07-05 05:22:35
【问题描述】:

我在 Django Rest Framework 中使用 Python PIL 库来构建二维码并将其保存到静态目录。

  def generate_qr(self, name):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_M,
        box_size=15,
        border=5
    )
    qr.add_data(name)
    qr.make(fit=True)
    img = qr.make_image(fill='black', back_color='white')
    img.save(settings.STATIC_ROOT+"/asset-tags/name.png")
    return(name+ '.png')

settings.py 用于媒体和静态网址:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_URL = "/mediafiles/"
MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles")

但是在保存时会抛出一个错误,说 /usr/app/static/name.png : no file or directory。 我正在创建新文件,那么它如何在给定文件夹中找到图像。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你设置MEDIA_URLMEDIA_ROOT了吗?查看docs 了解如何服务MEDIA_FILES
  • 这能回答你的问题吗? How does Django serve media files?
  • 我已经设置了 MEDIA_URL 和 MEDIA_ROOT。我已经更新了这个问题。您在上面分享的文档也可以用于保存图像?
  • 图像应保存在MEDIA_ROOT 中,您的设置应保存在mediafiles 目录中。试试settings.MEDIA_ROOT
  • img 的类型是什么?

标签: python django docker django-rest-framework python-imaging-library


【解决方案1】:

qrcode 包或Pillow 包如果不存在则不会创建目录。因此,根据您的设置,STATIC_ROOT 位于 /staticfiles 并确保名为 staticfiles 的目录(以及它的子目录)在运行脚本之前存在。

也就是说img.save(settings.STATIC_ROOT+"/asset-tags/name.png")语句应该是把二维码图片保存在/staticfiles/asset-tags/name.png这个路径下,并确保目录/staticfiles/asset-tags/ strong> 存在于您的项目路径中。

注意:使用 settings.MEDIA_ROOT 代替 settings.STATIC_ROOT 会更合适。

【讨论】:

  • 加上将其保存在MEDIA_ROOT 中会更合适。 img.save(settings.MEDIA_ROOT+"/asset-tags/"+"name.png"),将其保存在/mediafiles/asset-tags/
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多