Django 从http请求中检索实际文件(对于os.stat)

Django 从http请求中检索实际文件(对于os.stat),django,python-3.x,http,serialization,Django,Python 3.x,Http,Serialization,我想使用以下工具检索上传文件的元数据: st = os.stat(file_path) 但是,我不确定如何从http请求解析file_path属性。例如,我使用了: request.FILES 但接下来要做的是: TypeError: stat: path should be string, bytes, os.PathLike or integer, not MultiValueDict 我还序列化了请求,如下所示: serializer = FileSerializer(data=re

我想使用以下工具检索上传文件的元数据:

st = os.stat(file_path)
但是,我不确定如何从http请求解析file_path属性。例如,我使用了:

request.FILES
但接下来要做的是:

TypeError: stat: path should be string, bytes, os.PathLike or integer, not MultiValueDict
我还序列化了请求,如下所示:

serializer = FileSerializer(data=request.data)

如何在http请求中获取实际上传的文件?

虽然在将文件保存到永久位置(可能不适用于云存储等)之前,通常这样做是否正确值得怀疑,但答案是:

当上传的文件被Django临时存储在内存中(如果小)或磁盘上时

所有的属性都有大小名称

如果使用TemporaryFileUploadHandler存储文件-此文件位于
请求中。文件将是并且将具有
临时文件路径()
方法:

for f in request.FILES.getlist("file_field"):
    try:
        fstats = os.stat(f.temporary_file_path())
    except AttributeError:
        # do something
    # file processing logic

要从http请求检索实际文件,可以使用以下命令:

if request.method == 'POST':
        uploaded_file = request.FILES['XYZ']
        fs = FileSystemStorage()
        server_file_name = fs.save(uploaded_file.name, uploaded_file)
其中XYZ是输入标记中name属性的值。像这样:

<input type="file" name="XYZ" aria-label="Upload File" id="_upload_file">


您是否尝试过检查
request.FILES['file']
?@MichealJ.Roberts:是的,同样的错误消息我很抱歉,特别是您需要
os.stat()
中的哪些信息?我想这部分回答了问题。我刚刚在settings.py文件\u UPLOAD\u HANDLERS=['django.core.files.uploadhandler.TemporaryFileUploadHandler',]中做了一些更改,并实现了这一点。问题是,尽管os.stat中的stat采用了新的临时文件路径。因此,“原始”文件元数据以某种方式丢失(例如,我无法获取创建日期,只能从新处理程序的临时文件路径获取创建日期)。此元数据(创建/修改/访问时间、索引节点、权限、所有者)由底层文件系统设置,不是文件数据的实际部分,而是文件系统附加到文件上的标记。在上载过程中,仅传输实际的文件数据。某些/所有fs元数据可能会保留在存档中。所以,当用户上传文件时,文件中没有这样的元数据。好的,我明白了,所以如果在Windows计算机上,那么它是在Windows文件系统中确定的。难道你不能作为另一个http请求获取所需的元数据吗?实现这一点要简单得多。