我正在尝试将UploadedFile一个PIL Image对象转换为缩略图,然后将Image我的缩略图函数返回的PIL 对象转换回一个File对象.我怎样才能做到这一点?
python django django-file-upload django-uploads python-imaging-library
上传具有非ASCII字符的文件时,我得到UnicodeEncodeError:
Exception Type: UnicodeEncodeError at /admin/studio/newsitem/add/
Exception Value: 'ascii' codec can't encode character u'\xf8' in position 78: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
查看完整堆栈跟踪.
我用MySQL和nginx以及FastCGI运行Django 1.2.
这是根据Django Trac数据库修复的问题,但我仍然遇到问题.欢迎任何有关如何修复的建议.
编辑:这是我的图像字段:
image = models.ImageField(_('image'), upload_to='uploads/images', max_length=100)
Run Code Online (Sandbox Code Playgroud) 我写了一个django应用程序,但我对来自Web表单的上传文件的文件权限有一点问题.
基本上我可以上传一个.mp3文件,但它始终保持chmod 600.
容器文件夹具有chmod 775,并且umask设置为022.
我在共享托管服务.
我有一个应用程序,让人们上传文件,表示为UploadedFiles.但是,我想确保用户只上传xml文件.我知道我可以使用magic,但我不知道在哪里进行此检查 - 我无法将其放在clean函数中,因为在clean运行时文件尚未上传,据我所知.
这是UploadedFile模型:
class UploadedFile(models.Model):
"""This represents a file that has been uploaded to the server."""
STATE_UPLOADED = 0
STATE_ANNOTATED = 1
STATE_PROCESSING = 2
STATE_PROCESSED = 4
STATES = (
(STATE_UPLOADED, "Uploaded"),
(STATE_ANNOTATED, "Annotated"),
(STATE_PROCESSING, "Processing"),
(STATE_PROCESSED, "Processed"),
)
status = models.SmallIntegerField(choices=STATES,
default=0, blank=True, null=True)
file = models.FileField(upload_to=settings.XML_ROOT)
project = models.ForeignKey(Project)
def __unicode__(self):
return self.file.name
def name(self):
return os.path.basename(self.file.name)
def save(self, *args, **kwargs):
if not self.status:
self.status = …Run Code Online (Sandbox Code Playgroud) 我想将文件上传到仍在我的django项目中的MEDIA_ROOT路径,但是在我的路径中.
当我尝试这样做时,我得到一个SuspiciousOperation错误.
以下是我的设置文件中定义的路径:
MEDIA_ROOT = os.path.join(os.path.dirname( __file__ ), 'static_serve')
UPLOAD_DIR = os.path.join(os.path.dirname( __file__ ), 'uploads')
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我不希望我上传的文件可以通过浏览器访问,我的MEDIA_ROOT路径是.
有没有人知道我如何解决(修复)此错误.
我有一个模型 - 产品,其中包含缩略图.我有另一个模型,其中包含与产品相关的图像 - ProductImage.我希望在删除产品实例时从服务器中删除缩略图和图像,有一段时间这似乎有效,但现在不行了.
相关代码......
Class Product(models.Model):
title = Charfield
thumbnail = ImageField(upload_to='thumbnails/', verbose_name='thumbnail', blank=True, )
Class ProductImage(models.Model):
product = models.ForeignKey(plant, default=None, related_name='images')
image = models.ImageField(upload_to='images/', verbose_name='image',)
Run Code Online (Sandbox Code Playgroud)
以下删除方法(在产品类中)正在运行,但我更改了我的代码并且它不再有效 - 从我所读到的最佳做法是使用post_delete,而不是覆盖delete()
def delete(self):
images = ProductImage.objects.filter(product=self)
if images:
for image in images:
image.delete()
super(Product, self).delete()
Run Code Online (Sandbox Code Playgroud)
如何重写一个能实现我想要的删除方法?我曾尝试使用post_delete但到目前为止我一直没有成功,因为我不确定如何在删除ProductImage实例时应用它...
我正在尝试在服务器端保存图像.我收到它作为base64字符串,所以我先解码它然后将其保存在数据库中.但是这次失败,所以我检查了服务器错误日志,我发现以下错误.日志
[Tue May 21 14:26:38 2013] [error] [client 41.236.182.133] mod_wsgi (pid=4952): Exception occurred processing WSGI script '/root/AR_BROWSER/example/wsgi.py'.
[Tue May 21 14:26:38 2013] [error] [client 41.236.182.133] IOError: failed to write data
Run Code Online (Sandbox Code Playgroud)
我检查了wsgi.py
import os
import sys
path = '/root/AR_BROWSER/example'
sys.path.append('/root/AR_BROWSER/example')
sys.path.append('/root/AR_BROWSER')
sys.path.append('/root/AR_BROWSER/example/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
但我找不到错误.知道这个问题的原因是什么?!负责保存图像的代码
@csrf_exempt
def create_app(request):
appName = request.POST['name']
user = request.POST['userID']
c = request.POST['category']
i = request.POST['image']
imgdata = base64.b64decode(i)
t = datetime.now()
filename = t.strftime('test.jpg')
with open(filename, 'w') as f:
f.write(imgdata) …Run Code Online (Sandbox Code Playgroud) 我在CentOS上运行了一个Django/uwsgi/nginx堆栈.将大文件上传到django(1GB +)时,我希望它能够创建一个临时文件,/tmp并且随着上传的进行,我应该可以看到它增长.但是,我没有.ls -lah /tmp不显示正在创建或更改大小的任何新文件.我甚至settings.py明确指出FILE_UPLOAD_TEMP_DIR = '/tmp'但仍然没有.
我很感激在追踪临时文件存储位置方面的任何帮助.我需要这个来确定是否有任何大型上传正在进行中.
我在admin/urls上的上传方法有问题:
在我的设置中:
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = '/media/'
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/" …Run Code Online (Sandbox Code Playgroud) django django-models django-admin django-uploads django-media
前奏:
这是显示ImageField的最简单方法.让我们假设我的表单中有10个字段,我不想迭代它们template.html只是为了检查它是否是一个imageField并以不同的方式显示它.我想通过形式或插件之类的东西来处理它这个.所以我想要离开template.html,因为它在下面.
template.html
<table>
{{ form.as_table }}
</table>
Run Code Online (Sandbox Code Playgroud)
并向models.py添加一个image_tag方法:
class UserProfile(Model):
photo = ImageField(upload_to=PHOTO_DIRECTORY)
contacts = TextField(null=True)
... others
def image_tag(self):
return u'<img src="%s" />' % self.photo.url
image_tag.short_description = 'Image'
image_tag.allow_tags = True
Run Code Online (Sandbox Code Playgroud)
forms.py:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('contacts', 'photo', 'image_tag', ...others)
Run Code Online (Sandbox Code Playgroud)
我得到了一个Unknown field(s) (image_tag) specified for UserProfile公平的错误.
我也尝试将它放入,readonly_fields但它们不会以某种方式显示.我是否必须创建list_view?如果是的话应该在哪里?
我在这里想念什么?为什么该image_tag方法应该是模型的一部分而不是形式?模型描述了数据应该如何在数据库中持久化,而不是如何通过表单呈现给用户.这应该是形式的一部分,不应该吗?如果我错了,请纠正我.我该如何解决这个问题?任何帮助将不胜感激!
django ×10
django-uploads ×10
python ×3
django-admin ×2
file-upload ×2
django-forms ×1
django-media ×1
mongodb ×1
nginx ×1
permissions ×1