Bagaimanakah Django Boleh Melayan Fail Boleh Muat Turun Dengan Selamat Menggunakan X-Sendfile (atau X-Accel-Redirect)?

Barbara Streisand
Lepaskan: 2024-11-20 13:52:14
asal
882 orang telah melayarinya

How Can Django Securely Serve Downloadable Files Using X-Sendfile (or X-Accel-Redirect)?

Menyajikan Fail Boleh Muat Turun dengan Django

Pengguna di tapak web selalunya memerlukan keupayaan untuk memuat turun fail, tetapi melindungi fail dan menghalang muat turun terus adalah penting. Satu penyelesaian adalah untuk mengaburkan laluan fail supaya pengguna tidak boleh mengaksesnya secara langsung.

Untuk mencapai ini, buat URL yang mengandungi parameter, seperti:

http://example.com/download/?f=somefile.txt
Salin selepas log masuk

Andaikan fail yang boleh dimuat turun berada dalam folder /home/user/files/. Django boleh dikonfigurasikan untuk menyediakan fail untuk dimuat turun tanpa memerlukan URL dan Lihat khusus untuk memaparkan fail.

Modul X-Sendfile menawarkan penyelesaian yang optimum. Ia membolehkan Django mencari fail dan menentukan pengepalanya, manakala penyajian fail sebenar dikendalikan oleh pelayan web (cth., Apache, Lighttpd). Selepas memasang dan mengkonfigurasi mod_xsendfile, sepadukannya dengan pandangan anda:

from django.utils.encoding import smart_str

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
Salin selepas log masuk

Perhatikan bahawa pendekatan ini memerlukan kawalan pelayan atau syarikat pengehosan yang menyokong mod_xsendfile.

Pertimbangan Tambahan:

  • Untuk pelayan nginx, gunakan X-Accel-Redirect dan bukannya X-Sendfile.
  • Untuk Django 1.7 dan ke atas, gunakan content_type bukannya mimetype.
  • Menetapkan pengepala 'Content-Length' disyorkan untuk meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimanakah Django Boleh Melayan Fail Boleh Muat Turun Dengan Selamat Menggunakan X-Sendfile (atau X-Accel-Redirect)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan