我正尝试从 Django Filefield 中读取内容,正如在我的Django模型中可以看到的:
import os
import win32api
from django.db import models
from custom.storage import AzureMediaStorage as AMS
class File(models.Model):
'''
File model
'''
file = models.FileField(blank=False, storage=AMS(), null=False)
timestamp = models.DateTimeField(auto_now_add=True)
remark = models.CharField(max_length=100, default="")
class File_Version(File):
"""
Model containing file version information
"""
version = models.CharField(max_length=25, default="")
@property
def get_version(self):
"""
Read all properties of the given file and return them as a dictionary
"""
props = {'FileVersion': None}
# To check if the file exists ?
### This returns FALSE
print("Is the file there? ", os.path.isfile(str(File.file)) )
# To get file version info
fixedInfo = win32api.GetFileVersionInfo(str(File.file), '\\')
print("FixedInfo: ", fixedInfo)
但是 os.path.isfile()始终返回 False 。如何从FileField读取我的自定义模型?
此外,行 fixedInfo 给了我错误:
pywintypes.error:(2,'GetFileVersionInfo:GetFileVersionInfoSize', “系统找不到指定的文件。”
答案 0 :(得分:0)
os.path.isfile
返回文件路径是否指向文件(例如,与目录相对)。 File.file
指向models.FileField
对象;当前代码将始终返回False
。我想您会希望File.file.path
获取文件的实际绝对文件路径。
答案 1 :(得分:0)
您可以在模型定义中添加:
class File(models.Model):
file = models.FileField()
...
...
def filename(self):
return os.path.basename(self.file.name)
或者您可以尝试:
从django.core.files.storage导入default_storage
使用: 1)FieldFile.name:
文件名,包括从相关FileField的存储根开始的相对路径。
2)default_storage.exists(path)
如果给定名称引用的文件已经存在,则返回True。 存储系统;如果名称可用于新文件,则为False。
希望这行得通!
答案 2 :(得分:0)
当您为文件使用其他存储提供程序时,需要使用该存储提供程序的方法来查询文件对象。
os.path.isfile
和win32api.GetFileVersionInfo
仅适用于本地文件系统。