Загрузка Mp4 заставляет браузер воспроизводить файл вместо загрузки

На моем веб-сайте я передаю контент пользователей mp4. Я также разрешаю пользователям загружаться. Однако в Chrome кажется, что он автоматически воспроизводит файл во внутреннем проигрывателе, а не загружает файл.

Как заставить браузер загружать файл.

С уважением и благодарностью Craig

Ответ 1

Вы должны использовать заголовок HTTP Content-Disposition Content-Type: application/force-download", который заставит браузер загружать контент вместо этого его отображения.

В зависимости от языка на стороне сервера, который вы выполняете, отличается. В случае

PHP:

    header('Content-Disposition: attachment; filename="'.$nameOfFile.'"');

выполнит эту работу за вас.

Чтобы упростить и обобщить это для всех ваших файлов, вам может потребоваться написать метод, который направит ссылку на загружаемый контент.

Ссылка, которую вы можете показать в html, будет выглядеть следующим образом:

<a href="http://yoursite.com/downloadFile?id=1234">Click here to Download Hello.mp4</a>

И на стороне сервера вам понадобится script, который вызывается в /downloadFile (в зависимости от вашей маршрутизации), получите файл по id и отправьте его пользователю в качестве вложения.

<?php

 $fileId = $_POST['id'];

 // so for url http://yoursite.com/downloadFile?id=1234 will download file
 // /pathToVideoFolder/1234.mp4
 $filePath = "/pathToVideoFolder/".$fileId."mp4";
 $fileName = $fileId."mp4"; //or a name from database like getFilenameForID($id)
 //Assume that $filename and $filePath are correclty set.
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Type: application/force-download');
readfile($filePath);

Здесь "Content-Type: application/force-download" заставит браузер отображать параметр загрузки независимо от того, какой параметр по умолчанию используется для типа mime.

Независимо от того, какая у вас технология на стороне сервера, заголовки, на которые нужно обратить внимание:

'Content-Description: File Transfer'
'Content-Type: application/force-download'
'Content-Disposition: attachment; filename="myfile.mp4"

Ответ 2

Похоже, вы используете прямой href для mp4. Если вы используете на своем веб-сайте языки на стороне сервера (i.e.asp.net, php и т.д.), Вы можете принудительно загрузить. В asp или .net вы можете использовать HttpHandlers с "content-disposition", "attachment; filename = fname.ext"  или вернуть файл() ActionResult в MVC. Дайте мне знать, можете ли вы использовать любой код на стороне сервера, и я могу предоставить некоторый код.

В качестве альтернативы вы можете попробовать атрибут загрузки html5: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a?redirectlocale=en-US&redirectslug=HTML%2FElement%2Fa#attr-download

то есть. <a href="http://www.w3schools.com/images/myw3schoolsimage.jpg" download="downloadfilename">

Или попробуйте javascript/jQuery. Вот плагин: http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

Ответ 3

Настройка заголовка Content-Disposition должна его исправить.

Content-Disposition: attachment; filename=whatever.mp4;

Либо в настройках сервера, либо при предварительной обработке страницы.

Ответ 4

если вы хотите использовать кросс-браузерное решение

вам нужен серверный код для загрузки файла

Пример: Я работаю над технологией jsp, если вы можете использовать jsp на своем сайте, вы можете попробовать следующий код в файле download.jsp:

<%@ page import="java.io.*, java.lang.*, java.util.*" %>
<%
String filename=request.getParameter("filename");   
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename="+filename);
 %>

<%
/*
 File file = new File(filepath+filename );*/
 String path = getServletContext().getRealPath("/mp4/"+filename); 
 File file = new File(path);
FileInputStream fileIn = new FileInputStream(file);
ServletOutputStream out1 = response.getOutputStream();

byte[] outputByte = new byte[4096];
//copy binary contect to output stream
while(fileIn.read(outputByte, 0, 4096) != -1)
{
    out1.write(outputByte, 0, 4096);
}
fileIn.close();
out1.flush();
out1.close();
 %>

вы можете поместить код в файл: download.jsp

то в ваших ссылках на страницы вы будете использовать его, как:

<a href="download.jsp?filename=song1.mp4">song1</a>

с наилучшими пожеланиями к вам

Ответ 5

Вы можете сделать это несколькими способами. Я не уверен, что вы используете IIS или apache и какой язык на стороне сервера вы используете, но методы похожи для всех.

Вы можете добавить приложение MIME-типа/octect-stream к расширению .mp4 в вашем IIS или apache, поскольку все файлы с расширением .mp4 будут показаны с подсказкой загрузки. Это самый простой и надежный способ показа подсказки "загрузить".

Plz см. пример ниже.

http://www.codingstaff.com/learning-center/other/how-to-add-mime-types-to-your-server

В приведенном выше примере вместо установки расширений video/mp4 fpr.mp4 измените его на application/octect-stream

Кроме того, то же самое можно сделать и с помощью кода на стороне сервера (PHP-код). Код будет аналогичным с ASP.NET, пожалуйста, google для загрузки файла силы

$file_url = 'http://www.myremoteserver.com/file.mp4';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
readfile($file_url);

Ответ 6

Это как раз то, как хром делает вещи, и нет никакого способа обойти это, поэтому лучше всего попробовать другой медиаплеер. Если это не стирает, я бы рекомендовал использовать "сохранить ссылку как" enter image description here

Возможно, вам просто нужно сказать вам, как это сделать.