如何检查媒体文件夹中是否存在文件?

4

我已成功将文件上传到数据库(运行正常)。问题在于,如果媒体文件夹被删除,文件将存储在数据库中,这将引发错误[WinError 2] The system cannot find the file specified: ...。因此,我的问题是如何处理此错误。

如果文件存在于数据库中但不存在于媒体文件夹中,则我希望处理此错误并显示模板而无需出错。我该怎么做?

模板

{% for document in documents %}
 <tr>
<td>{{forloop.counter}}</td>
 <td>{{document.filename|truncatechars:15}}</td>
 <td>{{document.file.size|filesizeformat}}</td>
 <td>{{document.category}}</td>
 <td>{{document.file.url}}</td>
<tr>
{% endfor %}

模型

class Document(models.Model):
    category = models.ForeignKey(DocumentCategory, on_delete=models.CASCADE)
    file = models.FileField(upload_to='media/',
                            validators=[FileExtensionValidator(['pdf', 'xlsx', 'pptx', 'docx','xls']), file_size])
    created = models.DateTimeField(auto_now_add=True)


    @property
    def filename(self):
        return os.path.basename(self.file.name)           
2个回答

4
你可以使用 default_storage.exists(path) 来判断。
 from django.core.files.storage import default_storage
 path = 'path/to/file'
 default_storage.exists(path)

请注意您的路径必须在项目文件夹中。

如果该路径中存在文件,则该函数返回True,否则返回False。

Django FileFeild 中存在路径属性以获取路径。


0
  1. Django不应该在生产环境中提供媒体文件服务,因此与读取常规媒体文件相关的附加代码并没有太多意义。

  2. self.file.name包含相对于MEDIA_ROOT的路径,因此实现的方法并不正确。

  3. 既然您了解os.path,那么您实际上正在询问什么并不清楚;有path.exists方法和更具体的os.path.isfile

  4. 异常可以像Python中的任何其他异常一样通过try-except块捕获。

    try:
        # Do something with the file
    except IOError:
        # Do something in case of error

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接