it-swarm.com.de

Beim Herunterladen von MP4-Dateien wird der Browser anstelle des Downloads wiedergegeben

In meiner Website streame ich mp4-Inhalte von Nutzern. Ich erlaube Benutzern auch das Herunterladen von ..__ In Chrome scheint es jedoch, dass die Datei automatisch in einem internen Player abgespielt wird, anstatt die Datei herunterzuladen.

Wie zwinge ich den Browser, stattdessen die Datei herunterzuladen?.

Grüße und Danke Craig

10
Craig Mc

Sie müssen den HTTP-Header " Content-Disposition " und ' Content-Type: application/force-download ' verwenden, der den Browser dazu zwingt, den Inhalt herunterzuladen, anstatt ihn dort anzuzeigen. 

Je nach serverseitiger Sprache unterscheidet sich die Implementierung. Im Falle von 

PHP: 

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

wird die Arbeit für Sie erledigen. 

Um dies für alle Ihre Dateien zu vereinfachen und zu verallgemeinern, müssen Sie möglicherweise eine Methode schreiben, die einen Link zum herunterladbaren Inhalt weiterleitet. 

Der Link, den Sie in der HTML-Datei anzeigen können, lautet wie folgt: 

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

Und auf der Serverseite benötigen Sie ein Skript, das für/downloadFile (abhängig von Ihrem Routing) aufgerufen wird. Rufen Sie die Datei mit der ID ab und senden Sie sie als Anhang an den Benutzer. 

<?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);

Hier wird "Content-Type: application/force-download" den Browser dazu zwingen, die Download-Option anzuzeigen, unabhängig von der Standardeinstellung für einen MIME-Typ. 

Unabhängig von Ihrer serverseitigen Technologie sind folgende Header zu beachten: 

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

Hört sich an, als würden Sie direkt auf das mp4 zugreifen. Wenn Sie serverseitige Sprachen (d. H. .Asp.net, php usw.) auf Ihrer Website verwenden, können Sie einen Download erzwingen. In asp oder .net können Sie HttpHandlers mit "content-disposition", "attachment; Dateiname = fname.ext" .__ verwenden. oder geben Sie File () ActionResult in MVC zurück. Lassen Sie mich wissen, ob Sie einen serverseitigen Code verwenden können, und ich kann etwas Code bereitstellen. 

Alternativ können Sie das html5-Downloadattribut ausprobieren: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a?redirectlocale=en-US&redirectslug=HTML%2FElement%2Fa#attr-download

d.h. <a href="http://www.w3schools.com/images/myw3schoolsimage.jpg" download="downloadfilename">

Oder versuchen Sie es mit Javascript/jQuery. Hier ist ein Plugin: http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

7
johnnyarguelles

Durch Festlegen des Content-Disposition-Headers sollte dies behoben werden.

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

Entweder in den Servereinstellungen oder in der Vorverarbeitung der Seite.

1
Matt Rink

Sie können es auf verschiedene Arten erledigen. Ich bin nicht sicher, ob Sie IIS oder Apache verwenden und welche serverseitige Sprache Sie verwenden, aber die Techniken sind für alle ähnlich.

Sie können den MIME-Typ application/octect-stream zur Erweiterung .mp4 in Ihrem IIS oder Apache hinzufügen, so dass alle Dateien mit der Erweiterung .mp4 mit einer Download-Eingabeaufforderung angezeigt werden. Dies ist der einfachste und sicherste Weg, um die Aufforderung zum Herunterladen anzuzeigen.

Bitte sehen Sie das Beispiel unten.

http://www.codingstaff.com/learning-center/other/wohinzuaddieren-mimmentypenzu IhremIhrserver

Ändern Sie im obigen Beispiel die Einstellung video/mp4 fpr .mp4-Erweiterungen nicht in application/octect-stream

Dasselbe kann auch über serverseitigen Code (PHP-Code) erfolgen. Der Code wird auch mit ASP.NET ähnlich sein, bitte google nach "force file download"

$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);
0
Aby

wenn Sie eine Cross-Browser-Lösung wünschen

sie benötigen einen serverseitigen Code, um die Datei herunterzuladen

beispiel: Ich arbeite an der jsp-Technologie. Wenn Sie jsp in Ihrer Website verwenden können, können Sie den folgenden Code in der Datei download.jsp versuchen:

<%@ 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();
 %>

sie können den obigen Code in eine Datei einfügen: download.jsp

dann in deinen Seitenlinks wirst du es wie folgt verwenden:

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

mit meinen besten Wünschen

0
Anas2004