2017-09-19 3 views
1

Ich versuche statische Dateien auf einer Webanwendung zu aktivieren. Ich habe eine Reihe von Dateien in einem Ordner namens Updater, der sich außerhalb des Ordners wwwroot befindet. Damit der Zugang zu ihnen Ich habeStatische Dateien auf asp.net Core

app.UseStaticFiles(new StaticFileOptions() 
{ 
    ServeUnknownFileTypes = true, 
    FileProvider = new PhysicalFileProvider(
     Path.Combine(Directory.GetCurrentDirectory(), @"TestUpdater") 
    ), 
    RequestPath = new PathString("/Updater") 
}); 

Auf diese Weise können Sie ein anderes Programm in der Lage sein, um seine Dateien zu erhalten, indem die URLs aufrufen. Das Problem besteht darin, dass alle Dateien heruntergeladen und nicht bedient werden müssen. Es gibt eine TXT-Datei. Wie kann ich nur den Download zulassen, anstatt ihn zu bedienen?

Antwort

2

Die folgende Antwort liefert den beabsichtigten Effekt, aber die richtige zu verwendende Kopfzeile ist Content-Disposition. (Siehe application/octet-stream documentation)


Der einzige Unterschied zwischen „dienen“ und „Download“ Dateien, wie Sie beschreiben, ist, dass in einem Fall der Browser die Datei in ein temporäres Verzeichnis herunter und zeigt sie in dem Fenster, während die andere der Der Browser fragt einen Benutzer, wo er die Datei an einem festen Ort speichern soll.

Wenn die anderen Programme, auf die Sie sich beziehen, den Server für diese Dateien direkt kontaktieren, sollte das keine Rolle spielen. Zum Beispiel müssen Sie mit HttpClient Ihre statische Middleware nicht ändern.

Wenn Sie möchten, dass der Browser den Benutzer auffordert, die Datei zu speichern, selbst wenn es sich um einen erkannten Inhaltstyp handelt, versuchen Sie, den Antworttyp "Content-Type" auf "application/octet-stream" zu setzen. Ändern Sie dazu Ihre StaticFileOptions, um etwas wie folgt zu verwenden:

new StaticFileOptions() 
{ 
    OnPrepareResponse = context => 
    { 
     context.Context.Response.Headers["Content-Type"] = "application/octet-stream"; 
    } 
} 
+0

Das tut es. Ich habe dort auch eine PHP-Datei, die ausgeführt werden muss, und ich dachte, das "Servieren" sei das Problem. Das Problem besteht immer noch, muss ich etwas Bestimmtes tun, damit die statische PHP-Datei ausgeführt werden kann? – Ratan

+0

@Ratan muss PHP dafür die Datei ausführen. Haben Sie PHP auf dem Server laufen? (Das klingt für mich nach einer sehr merkwürdigen Architektur.) – Eilon

+0

Ja, PHP läuft, wenn die Datei von einer Nicht-Core-Site auf demselben Server ausgeführt wird. Ja, dem stimme ich zu. Ich plane, es in der Zukunft zu ändern, kann es aber momentan nicht, da ich einen bestehenden Nicht-Kern zu einem Kern aufrüste und einige der alten Dateien beibehalten muss, bis wir sie tatsächlich von dort wegbringen. – Ratan

Verwandte Themen