如何在Django中显示文件大小

6g8kf2rb  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(92)

我有一个PDF文件在我的媒体目录,我希望用户下载,问题是,我怎么能让用户看到文件的大小,让他们知道他们想要下载的大小。
另外,它是更好地创建一个模型的pdf文件如下所示,在models.py?什么是最好的方法来处理这一点。我需要帮助。
models.py现在不是我代码的一部分)

class PersonalStatement(models.Model):
    personal_statement = models.FileField(upload_to='personal_statement/')
    title = models.CharField(max_length=50)

字符串

views.py

def personal_statement_download(request):
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    filename = 'Writing-a-Personal-Statement.pdf'
    filepath = BASE_DIR + '/media/personal_statement/' + filename
    path = open(filepath, 'rb')
    mime_type, _ = mimetypes.guess_type(filepath)
    response = HttpResponse(path, content_type=mime_type)
    response['Content-Disposition'] = "attachment; filename=%s" % filename
    return response

url.py

path('personal_statement/download/', views.personal_statement_download,name='personal_statement_download'),


templates/index.html

<a href="{% url 'personal_statement_download'%}" class="applyRightContentContainerSubDownloadLink"> Download File &#8681;</a>


views.py for index.html

def home (request):
    return render(request, 'core/index.html')

fd3cxomn

fd3cxomn1#

我认为personal_statement_download没有多大意义:Django通常不提供媒体文件或静态文件。事实上,这些文件通常由Nginx或Apache等Web服务器提供,因为它可能(很多)更有效,更安全。
但无论如何,我们可以通过以下方式获得文件的大小:

import os
import os.path

from django.conf import settings

def home(request):
    filename = 'Writing-a-Personal-Statement.pdf'
    file_stats = os.stat(os.path.join(settings.MEDIA_ROOT, filename))
    file_size = file_stats.st_size
    return render(request, 'core/index.html', {'file_size': file_size})

字符串
然后我们可以使用**|filesizeformat**模板过滤器[Django-doc]来正确格式化文件大小:

{% load static %}
<a href="{% get_media_prefix %}Writing-a-Personal-Statement.pdf" class="applyRightContentContainerSubDownloadLink">
   Download File &#8681; ({{ file_size|filesizeformat }})
</a>


通过使用{% get_media_prefix %},我们可以让web服务器处理文件下载。在调试模式下,Django还提供媒体文件,如果你将其添加到路径中。

1qczuiv0

1qczuiv02#

你可以使用“os”来实现:

import os

file_name = "/Users/you/abcdef.txt"

file_stats = os.stat(file_name)

print(file_stats)
print(f'File Size in Bytes is {file_stats.st_size}')
print(f'File Size in MegaBytes is {file_stats.st_size / (1024 * 1024)}')

字符串
为了将它提供给前端,只需通过上下文给予它,就像这样:

context = {
    "file_size": f"{file_stats.st_size / (1024 * 1024)} MB"
}


来源:https://www.digitalocean.com/community/tutorials/how-to-get-file-size-in-python
编辑:
就像@willeM_货车Onsem在他的评论中说的那样,你可能想把你的文件名改成这样:

filename = request.POST['chosen_file']

相关问题