Загрузка 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]()
Возможно, вам просто нужно сказать вам, как это сделать.