Aprendí FileResponse hoy. Este módulo es increíble. Después de aprenderlo, comencé a imaginar cómo seré en el futuro en el front-end, y estoy babeando cuando pienso en ello.
ArchivoRespuesta
FileResponse es una subclase de StreamingHttpResponse con segmentación automática y funciones de iteración automática, adecuada para la transmisión de archivos binarios. Los formatos de archivo de transmisión comúnmente utilizados incluyen py, txt, jpg, png, gif, docx, xlsx, mp3, mp4, etc.
Echemos un vistazo al código.
from django.http import FileResponse
def download(request):
response = FileResponse(open(r"yinyue.mp3", "rb"))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = "attachment;filename=music.mp3" # 注意filename不支持中文
return response
Defina la función de descarga en la vista, tenga en cuenta que la solicitud debe usarse como parámetro y el módulo FileResponse debe importarse. Cuando usa FileResponse para leer un archivo, puede usar directamente la función de abrir sin usar el método abierto. Hay dos etiquetas MIME específicas Content-Type y Content-Disposition, la primera es para especificar el tipo de archivo, la segunda es para especificar el nombre del archivo para descargar, tenga en cuenta que hay un parámetro adjunto y el nombre del archivo no es compatible con chino nombres (por el momento lo entiendo).
Finalmente, si usa una ruta relativa al especificar la ruta del archivo, debe prestar especial atención.La ruta relativa debe ser relativa a manage.py, no relativa a la función de vista.
Debido a que MP3 y manage.py están en el mismo nivel de directorio, la referencia directa está hecha. Ah, por cierto, al leer y escribir, lea y escriba en binario, que es rb, no r.