gpt4 book ai didi

Django 错误 (13, 'Permission denied')

转载 作者:可可西里 更新时间:2023-11-01 13:27:36 24 4
gpt4 key购买 nike

我一直在 http://lightbird.net/dbe/photo.html 开发这个照片管理器和共享应用程序的第一部分 | .我正在尝试生成缩略图,当我这样做时。我收到此错误。

我有 Windows Vista。

  IOError at /admin/photo/image/add/
(13, 'Permission denied')
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/photo/image/add/
Django Version: 1.4.3
Exception Type: IOError
Exception Value: (13, 'Permission denied')

Exception Location:C:\Python26\lib\site-packages\PIL\Image.py in save, line 1399
Python Executable:C:\Python26\python.exe
Python Version: 2.6.0
Python Path:

['C:\\djcode\\mysite',
'C:\\Python26\\python26.zip',
'C:\\Python26\\DLLs',
'C:\\Python26\\lib',
'C:\\Python26\\lib\\plat-win',
'C:\\Python26\\lib\\lib-tk',
'C:\\Python26',
'C:\\Python26\\lib\\site-packages',
'C:\\Python26\\lib\\site-packages\\PIL']

Server time: Sun, 10 Feb 2013 23:49:34 +1100

我的 models.py

from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin
from string import join
from django.core.files import File
from os.path import join as pjoin
from tempfile import *

import os
from PIL import Image as PImage
from mysite.settings import MEDIA_ROOT


class Album(models.Model):
title = models.CharField(max_length=60)
public = models.BooleanField(default=False)
def __unicode__(self):
return self.title

class Tag(models.Model):
tag = models.CharField(max_length=50)
def __unicode__(self):
return self.tag

class Image(models.Model):
title = models.CharField(max_length=60, blank=True, null=True)
image = models.FileField(upload_to="images/")
tags = models.ManyToManyField(Tag, blank=True)
albums = models.ManyToManyField(Album, blank=True)
created = models.DateTimeField(auto_now_add=True)
rating = models.IntegerField(default=50)
width = models.IntegerField(blank=True, null=True)
height = models.IntegerField(blank=True, null=True)
user = models.ForeignKey(User, null=True, blank=True)
thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=True)

def __unicode__(self):
return self.image.name
def save(self, *args, **kwargs):
"""Save image dimensions."""
super(Image, self).save(*args, **kwargs)
im = PImage.open(pjoin(MEDIA_ROOT, self.image.name))
self.width, self.height = im.size

# large thumbnail
fn, ext = os.path.splitext(self.image.name)
im.thumbnail((128,128), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb2" + ext
tf2 = NamedTemporaryFile()
im.save(tf2.name, "JPEG")
self.thumbnail2.save(thumb_fn, File(open(tf2.name)), save=False)
tf2.close()

# small thumbnail
im.thumbnail((40,40), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb" + ext
tf = NamedTemporaryFile()
im.save(tf.name, "JPEG")
self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)
tf.close()

super(Image, self).save(*args, ** kwargs)

def size(self):
"""Image size."""
return "%s x %s" % (self.width, self.height)

def __unicode__(self):
return self.image.name

def tags_(self):
lst = [x[1] for x in self.tags.values_list()]
return str(join(lst, ', '))

def albums_(self):
lst = [x[1] for x in self.albums.values_list()]
return str(join(lst, ', '))

def thumbnail(self):
return """<a href="/media/%s"><img border="0" alt="" src="/media/%s" height="40" /></a>""" % (
(self.image.name, self.image.name))
thumbnail.allow_tags = True
class AlbumAdmin(admin.ModelAdmin):
search_fields = ["title"]
list_display = ["title"]

class TagAdmin(admin.ModelAdmin):
list_display = ["tag"]

class ImageAdmin(admin.ModelAdmin):
search_fields = ["title"]
list_display = ["__unicode__", "title", "user", "rating", "size", "tags_", "albums_","thumbnail", "created"]
list_filter = ["tags", "albums"]
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()

问题出在这里:

from django.core.files import File
from os.path import join as pjoin
from tempfile import *

class Image(models.Model):
# ...

thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=True)

def save(self, *args, **kwargs):
"""Save image dimensions."""
super(Image, self).save(*args, **kwargs)
im = PImage.open(pjoin(MEDIA_ROOT, self.image.name))
self.width, self.height = im.size

# large thumbnail
fn, ext = os.path.splitext(self.image.name)
im.thumbnail((128,128), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb2" + ext
tf2 = NamedTemporaryFile()
im.save(tf2.name, "JPEG")
self.thumbnail2.save(thumb_fn, File(open(tf2.name)), save=False)
tf2.close()

# small thumbnail
im.thumbnail((40,40), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb" + ext
tf = NamedTemporaryFile()
im.save(tf.name, "JPEG")
self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)
tf.close()

super(Image, self).save(*args, ** kwargs)

如何修复此错误?

最佳答案

在我看来,django 没有访问您的 MEDIA_ROOT 文件夹所需的权限。

查看 settings.py 文件中的 MEDIA_ROOT 设置。然后检查文件夹的权限(类似于 bash shell 中的 ls -lsa/path/to/media_root)。确保运行 django 的用户具有对该文件夹的写入权限。

此外,正如 asermax 指出的那样,请确保您已在 MEDIA_ROOT 中创建了一个图像目录。

查看 serving static files 的文档特别是关于 serving other directories 的部分

更新

也许是 this issue .尝试将 im.save(tf2.name, "JPEG") 替换为 im.save(tf2, "JPEG")

关于Django 错误 (13, 'Permission denied'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com