gpt4 book ai didi

python - Django:如何使用 FilePathField 获取文件大小

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:18 25 4
gpt4 key购买 nike

我在一家后期制作公司工作,我们的媒体文件位于服务器上。通过在第二台服务器上运行的站点,用户将指向一个文件,执行一些操作(例如计算校验和)并将结果保存在数据库中。

我正在寻找有关如何使用 FilePathField 获取文件大小的“最佳实践”示例。我已经阅读了教程并在文档中进行了搜索,但我无法根据我的需要将各个部分组合在一起。

一些相关代码(编辑:更正了 View ,打印了 #1 和 #3):

模型.py

    class AssetTest(models.Model):
file_path = models.FilePathField(path=r"", default="")
file_name = models.CharField(max_length=250, default="")
file_size = models.IntegerField(default=0)

def __str__(self):
return self.file_path

表单.py

class AssetTestForm(forms.ModelForm):

class Meta:
model = AssetTest
fields = ("file_name", "file_size")

View .py

def asset_select(request):
if request.method == 'POST':
print("1")
form = AssetTestForm(request.POST)

if form.is_valid():
print("2")
form.save(commit=False)
form.file_name = request.FILES['file'].name
form.file_size = request.FILES['file'].size
form.save()
return HttpResponseRedirect('/assetmanage/assets/')

print("3")

else:
print("4")
form = AssetTestForm()
return render(request, 'assetmanage/asset_select.html', {'form': form})

asset_select.html

{% extends "assetmanage/base.html" %}
{% block title %}Add Asset{% endblock %}

{% block body %}
<div class="container-fluid">

<div class="row">

<div class="col-sm-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body">

<form class="form-horizontal" name="asset_select" action="/assetmanage/asset/test/" method="post" enctype="multipart/form-data">
{% csrf_token %}

<div class="form-group">
<label class="control-label col-sm-2">Select a file:</label>
<input type="file" name="asset_file">
</div>

<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>

</form>

</div>
</div>
</div>
</div>
</div>
{% endblock %}

最佳答案

在 FilePathField 中给出正确的路径名

FilePathField(path="/home/simon/",..)
FilePathField

cleaned_data 将为您提供确切的路径,因此可以使用它来获取文件名和文件大小...

form = AssetTestForm(request.POST)
if form.is_valid():
form.save(commit=False)
temp_file_obj = TemporaryFileUploadHandler(form.cleaned_data['file_path'])
form.instance.file_size = temp_file_obj.chunk_size
form.instance.file_name = form.cleaned_data['file_path'].split("/")[-1]
form.save()

关于python - Django:如何使用 FilePathField 获取文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38650340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com