Laden Sie die Datei von einer ASP.NET-Web-API-Methode mit AngularJS herunter
In meinem Angular JS-Projekt, ich habe eine <a>
Anker-Tags, die, wenn Sie geklickt haben, wird eine HTTP - GET
Anfrage zu einem WebAPI-Methode gibt eine Datei an.
Nun möchte ich die Datei heruntergeladen werden, um den Benutzer, sobald die Anforderung erfolgreich. Wie mache ich das?
Anker-tag:
<a href="#" ng-click="getthefile()">Download img</a>
AngularJS:
$scope.getthefile = function () {
$http({
method: 'GET',
cache: false,
url: $scope.appPath + 'CourseRegConfirm/getfile',
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}).success(function (data, status) {
console.log(data); //Displays text data if the file is a text file, binary if it's an image
//What should I write here to download the file I receive from the WebAPI method?
}).error(function (data, status) {
//...
});
}
Meinen WebAPI Methode:
[Authorize]
[Route("getfile")]
public HttpResponseMessage GetTestFile()
{
HttpResponseMessage result = null;
var localFilePath = HttpContext.Current.Server.MapPath("~/timetable.jpg");
if (!File.Exists(localFilePath))
{
result = Request.CreateResponse(HttpStatusCode.Gone);
}
else
{
//Serve the file to the client
result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "SampleImg";
}
return result;
}
InformationsquelleAutor der Frage Amar Duplantier | 2014-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unterstützung für das herunterladen von binären Dateien in ajax ist nicht groß, es ist sehr viel noch unter Entwicklung als arbeitsvorlagen.
Einfache download-Methode:
Können Sie die browser-download die gewünschte Datei einfach über den code unten, und diese wird in allen Browsern, und natürlich auslösen der WebApi Anfrage genau das gleiche.
Ajax-binary-download-Methode:
Verwendung von ajax zum download der binären Datei getan werden kann, die in einigen Browsern und unten ist eine Implementierung, die die Arbeit in der neuesten Aromen von Chrome, Internet Explorer, FireFox und Safari.
Er verwendet eine
arraybuffer
Antwort geben, die wird dann umgewandelt in ein JavaScript -blob
die dann entweder präsentiert Sie sparen mit dersaveBlob
Methode - aber das ist nur momentan in Internet Explorer - oder sich in ein blob-Daten-URL, die geöffnet wird, durch den browser, Auslösung der download-dialog, wenn Sie den mime-Typ wird unterstützt für die Anzeige im browser.Internet Explorer 11-Unterstützung (Feste)
Hinweis: Internet Explorer 11 nicht wie mit der
msSaveBlob
Funktion hätte es die alias - vielleicht ein Sicherheits-feature, sondern eher ein Makel, Also mitvar saveBlob = navigator.msSaveBlob || navigator.webkitSaveBlob ... etc.
zum ermitteln der verfügbarensaveBlob
Unterstützung verursacht eine Ausnahme; daher, warum der folgende code testet jetztnavigator.msSaveBlob
getrennt. Dank? MicrosoftVerwendung:
Hinweise:
Sollten Sie ändern Ihre WebApi Methode zurückgegeben, die folgende überschriften:
Habe ich die
x-filename
header zu senden, die mit dem Namen. Dies ist eine benutzerdefinierte Kopfzeile für Bequemlichkeit, Sie können sich aber extrahieren den Dateinamen aus dercontent-disposition
header verwenden von regulären Ausdrücken.Sollten Sie die
content-type
mime-header für Ihre Antwort zu, so dass der browser weiß, dass die Daten-format.Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Scott
C# WebApi PDF-download alle arbeiten mit Angular JS-Authentifizierung
Web-Api-Controller
Angular JS Service
Entweder tun
Angular JS-Controller aufrufen der service
Und zuletzt die HTML-Seite
Diese wird umgestaltet teilen nur der code, hoffe, es hilft jemand, wie es dauerte eine Weile, bis dies funktioniert.
InformationsquelleAutor der Antwort tfa
Für mich ist die Web-API Schienen-und client-Seite-Winkel verwendet, mit Restangular und FileSaver.js
Web-API
HTML
Winkel-controller
Angular Service
InformationsquelleAutor der Antwort AnkitG
Hatten wir auch eine Lösung zu entwickeln, die würde sogar die Arbeit mit APIs, die eine Authentifizierung erfordern (siehe dieser Artikel)
Mithilfe von AngularJS in einer nussschale ist hier, wie wir es Taten:
Schritt 1: Erstellen einer dedizierten Richtlinie
Schritt 2: eine Vorlage Erstellen, die
Schritt 3: Verwenden Sie
Hierdurch werden eine Blaue Taste. Wenn Sie darauf klicken, wird ein PDF heruntergeladen werden (Achtung: das backend hat zu liefern, die PDF in Base64-Kodierung!) und in der href. Die Taste leuchtet grün und wechselt den text zu Speichern. Der Benutzer kann klicken Sie erneut und präsentiert mit einem standard-download-Datei-dialog für die Datei meine-genial.pdf.
InformationsquelleAutor der Antwort aix
Senden Sie Ihre Datei als base64 string.
Wenn attr-Methode funktioniert nicht in Firefox können Sie auch javaScript setAttribute-Methode
InformationsquelleAutor der Antwort PPB
Könnten Sie implementieren ein showfile-Funktion, die Parameter der zurückgegebenen Daten aus der WEBApi, und einen Dateinamen für die Datei, die Sie herunterladen möchten. Was ich Tat, war ein separates browser-Dienst identifiziert den browser des Benutzers und verarbeitet die Wiedergabe der Datei auf den browser. Zum Beispiel, wenn die Ziel-browser ist chrome auf einem ipad, müssen Sie javascript FileReader-Objekt.
InformationsquelleAutor der Antwort Erkin Djindjiev
In der Komponente i ist.e angular js-code:
InformationsquelleAutor der Antwort Shivani Jadhav