标签: django-file-upload

django filefield仅在模板中返回文件名

我在我的FileField类型的模型中有一个字段.这给了我一个类型为File的对象,它有以下方法:

File.name:文件名,包括MEDIA_ROOT的相对路径.

我想要的是类似.filename的东西,它只会给我文件名,而不是路径

就像是:

{% for download in downloads %}
  <div class="download">
    <div class="title">{{download.file.filename}}</div>
  </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这将给出类似myfile.jpg的东西

谢谢

django django-templates django-file-upload

55
推荐指数
2
解决办法
5万
查看次数

你如何将PIL`Image`转换为Django`File`?

我正在尝试将UploadedFile一个PIL Image对象转换为缩略图,然后将Image我的缩略图函数返回的PIL 对象转换回一个File对象.我怎样才能做到这一点?

python django django-file-upload django-uploads python-imaging-library

50
推荐指数
3
解决办法
2万
查看次数

Django上传:丢弃上传的重复项,使用现有文件(基于md5的检查)

我有一个模型FileField,其中包含用户上传的文件.由于我想节省空间,我想避免重复.

我想要实现的目标:

  1. 计算上传的文件md5校验和
  2. 使用基于md5sum文件名存储文件
  3. 如果已存在具有该名称的文件(新文件重复),则丢弃上载的文件并使用现有文件

12已经可以使用了,但是如何忘记上传的副本并使用现有文件呢?

请注意,我想保留现有文件不是覆盖它(主要是为了保持修改时间相同 - 更好的备份).

笔记:

  • 我正在使用Django 1.5
  • 上传处理程序是 django.core.files.uploadhandler.TemporaryFileUploadHandler

码:

def media_file_name(instance, filename):
    h = instance.md5sum
    basename, ext = os.path.splitext(filename)
    return os.path.join('mediafiles', h[0:1], h[1:2], h + ext.lower())

class Media(models.Model):
    orig_file = models.FileField(upload_to=media_file_name)
    md5sum = models.CharField(max_length=36)
    ...

    def save(self, *args, **kwargs):
            if not self.pk:  # file is new
                md5 = hashlib.md5()
                for chunk in self.orig_file.chunks(): …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-file-upload

25
推荐指数
2
解决办法
1万
查看次数

通过django shell保存图像/文件

我试图通过django shell保存图像文件.

model.py是:

class user(models.Model):
    name=models.CharField(max_length=20)
    pic=models.ImageField()
Run Code Online (Sandbox Code Playgroud)

使用admin和表单可以很好地使用Everyhing,但我想使用shell保存图像:

就像是

>>>user1=User(name='abc', pic="what to write here")
Run Code Online (Sandbox Code Playgroud)

python django django-models django-file-upload django-shell

23
推荐指数
2
解决办法
1万
查看次数

如何使用FileField限制ModelForms文件上传的文件类型?

我的目标是将Django ModelForm上的FileField限制为PDF和Word文档.我用google搜索的答案都涉及创建一个单独的文件处理程序,但我不知道如何在ModelForm的上下文中这样做.settings.py中是否有设置我可以用来限制上传文件类型?

django django-forms django-file-upload

20
推荐指数
7
解决办法
2万
查看次数

Django(音频)文件验证

我正在尝试一个允许用户上传音频文件的网站.我已经阅读了我可以获得的每个文档,但是找不到有关验证文件的内容.

总计newb(从未做过任何类型的任何文件验证)并尝试解决这个问题.有人可以握住我的手告诉我我需要知道什么吗?

一如既往,提前谢谢你.

django django-models django-file-upload

19
推荐指数
1
解决办法
3365
查看次数

在表单的清理方法中读取文件数据

所以,我正在努力实现我之前的问题的答案.

这是我的模特:

class Talk(models.Model):
  title        = models.CharField(max_length=200)
  mp3          = models.FileField(upload_to = u'talks/', max_length=200)
Run Code Online (Sandbox Code Playgroud)

这是我的表格:

class TalkForm(forms.ModelForm):
  def clean(self):
    super(TalkForm, self).clean()
    cleaned_data = self.cleaned_data

    if u'mp3' in self.files:
      from mutagen.mp3 import MP3
      if hasattr(self.files['mp3'], 'temporary_file_path'):
        audio = MP3(self.files['mp3'].temporary_file_path())
      else:
        # What goes here?
        audio = None # setting to None for now
      ...
    return cleaned_data

  class Meta:
    model = Talk
Run Code Online (Sandbox Code Playgroud)

Mutagen在磁盘上需要类似文件的对象或文件名(我认为) - 第一种情况(上传的文件大于内存中处理的文件大小)工作正常,但我不知道如何处理InMemoryUploadedFile我得到的其他情况.我试过了:

# TypeError (coercing to Unicode: need string or buffer, InMemoryUploadedFile found) …
Run Code Online (Sandbox Code Playgroud)

django django-file-upload mutagen

16
推荐指数
1
解决办法
9440
查看次数

限制访问Django中的私有文件下载

我的django应用程序中有多个FileFields,可以属于不同的用户.我正在寻找一种限制不是文件所有者的用户访问文件的好方法.

实现这一目标的最佳方法是什么?有任何想法吗?

python django django-file-upload

13
推荐指数
1
解决办法
8159
查看次数

FileField大小和模板中的名称

如何在模板中获取FileField的大小和名称?

我的模型设置如下:

class PDFUpload(models.Model):
    user = models.ForeignKey(User, editable=False)
    desc = models.CharField(max_length=255)
    file = models.FileField(upload_to=upload_pdf)
Run Code Online (Sandbox Code Playgroud)

我的模板设置如下:

{% for download in downloads %}
    <div class="download">
        <div class="title"> Name</div>
        <div class="size">64.5 MB</div>
        <div class="desc">{{download.desc}}</div>
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

如何显示文件名和大小?

django django-templates django-file-upload

12
推荐指数
1
解决办法
1万
查看次数

Django 动态 FileField upload_to

我正在尝试为 FileField 模型制作动态上传路径。因此,当用户上传文件时,Django 将其存储到我的计算机 /media/(username)/(path_to_a_file)/(filename)。

例如 /media/Michael/Homeworks/Math/Week_1/questions.pdf 或 /media/Ernie/Fishing/Atlantic_ocean/Good_fishing_spots.txt

VIEWS
@login_required
def add_file(request, **kwargs):
if request.method == 'POST':
    form = AddFile(request.POST, request.FILES)
    if form.is_valid():
        post = form.save(commit=False)
        post.author = request.user

        post.parent = Directory.objects.get(directory_path=str(kwargs['directory_path']))
        post.file_path = str(kwargs['directory_path'])

        post.file_content = request.FILES['file_content'] <-- need to pass dynamic file_path here

        post.save()
        return redirect('/home/' + str(post.author))

MODELS
class File(models.Model):
    parent = models.ForeignKey(Directory, on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    file_name = models.CharField(max_length=100)
    file_path = models.CharField(max_length=900)
    file_content = models.FileField(upload_to='e.g. /username/PATH/PATH/..../')

FORMS
class AddFile(forms.ModelForm):
    class Meta:
        model = File …
Run Code Online (Sandbox Code Playgroud)

django file-upload django-models filefield django-file-upload

9
推荐指数
2
解决办法
7975
查看次数