Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melayan Fail Boleh Muat Turun dengan Laluan Tersembunyi di Django?

Bagaimana untuk Melayan Fail Boleh Muat Turun dengan Laluan Tersembunyi di Django?

DDD
DDDasal
2024-11-28 11:19:12140semak imbas

How to Serve Downloadable Files with Hidden Paths in Django?

Muat Turun Fail Dinamik dengan Django

Dalam aplikasi web, selalunya perlu membenarkan pengguna memuat turun fail. Walau bagaimanapun, anda mungkin mahu mengaburkan laluan fail untuk menghalang akses terus. Dengan Django, anda boleh menyampaikan fail yang boleh dimuat turun dengan laluan tersembunyi.

Soalannya:

Seorang pengguna ingin mencipta URL seperti http://example.com/download /?f=somefile.txt yang, apabila diakses, menyajikan fail yang terletak di /home/user/files/somefile.txt tanpa memaparkannya dalam pelayar.

Jawapannya:

Untuk mencapai ini, anda boleh menggunakan gabungan kelas HttpResponse dan modul xsendfile. HttpResponse menjana laluan ke fail atau fail itu sendiri, manakala xsendfile mengendalikan penyajian fail sebenar.

Berikut ialah coretan kod contoh yang menunjukkan penyepaduan:

from django.utils.encoding import smart_str
from django.http import HttpResponse

response = HttpResponse(content_type='application/force-download')
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
return response

Penyelesaian ini memerlukan anda untuk mempunyai kawalan ke atas pelayan anda atau pastikan mod_xsendfile (untuk Apache) atau X-Accel-Redirect (untuk nginx) ditetapkan up.

Kemas kini untuk Django 1.7:

Atribut mimetype dalam kod hendaklah digantikan dengan content_type.

Atas ialah kandungan terperinci Bagaimana untuk Melayan Fail Boleh Muat Turun dengan Laluan Tersembunyi di Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn