2016-09-29 1 views
2

Ich entwickle eine Webseite in mvc4 und ich möchte PDF-Dateien mit jquery anzeigen. Ich speichere Dateien außerhalb von server.mappath. Unten ist mein Controller-Code.Wie können Dateien in jquery angezeigt werden, die außerhalb von Server.mappath in mvc4 gespeichert sind?

Ich striinge Dateien in @ "F: \ UploadedFile", die außerhalb meiner Wurzel ist. Es ist also nicht direkt zugänglich. Im obigen Code lade ich Dateinamen und entsprechende Dateien auch ab. Unten ist mein jquery Code, um Datei anzuzeigen. wenn uploadedfile Ordner in meinem Stamm

function ShowFiepopup(FileName) { 

    $("#dialog").dialog({ 
     modal: true, 
     title: "Preview of " + FileName, 
     width: 850, 
     height: 600, 
     buttons: { 
      Close: function() { 
       $(this).dialog('close'); 
      } 
     }, 

     open: function() { 
      var object = "<object data=\"{FileName}\" type=\"application/pdf\" Zoom=\"100%\" width=\"800px\" height=\"600px\">"; 
      object += "If you are unable to view file, you can download from <a href=\"{FileName}\">here</a>"; 
      object += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file."; 
      object += "</object>"; 
      object = object.replace(/{FileName}/g, "../UploadedFile/" + FileName); 
      $("#dialog").html(object); 

     } 
    }); 
}; 


function Download(pClientid) { 

     $.ajax(
     { 
      type: "GET", 
      cache: false, 
      data: { ClientId: pClientid }, 
      dataType: "json", 
      cache: false, 
      url: '/TestRendering/Download', 
      headers: { 
       'VerificationToken': forgeryId 
      }, 
      success: function (data) { 
       ShowFiepopup(data); 
      } 
     }); 
    } 

Im jquery ich nur und unter Codezeile Dateinamen wird nur am recieving arbeiten.

object = object.replace(/{FileName}/g, "../UploadedFile/" + FileName); 

Aber wenn ich speichere Datei außerhalb root zum Beispiel, wenn ich es in speichern @ „F: \ UploadedFile“ Pfad dann jquery Code nicht die direkten Zugriff wird mit einzureichen. Also, wie kann ich mit dem obigen Code auf Datei zugreifen und anzeigen? Ich bin mir nicht sicher, ob ich nur den Dateinamen oder den vollständigen Pfad zurückgeben möchte. Wenn es vollständiger Pfad ist, wie kann ich es in jquery präsentieren? Bitte geben Sie mir wertvolle Informationen. Danke

+0

als auch für die Sicherheit erforderlich ist? Nehmen wir an, Ihre Upload-Datei ist: abc.txt, kann ich, wenn ich den Browser http://www.example.com/UploadedFile/abc.txt verwende, auf die Datei zugreifen? – Jacky

+0

Wenn ich diese Datei im Root-Ordner behalte, kann ich auf die Datei zugreifen. Ich möchte nicht direkt auf Datei zugreifen, das ist der Grund, warum ich Dateien in Laufwerk f behalten möchte. So kann niemand direkt auf Dateien zugreifen. –

+0

Wie können die Leute es herunterladen oder darauf zugreifen? Sie können nicht erwarten, dass Benutzer auf Ihre Datei nur nach Dateiname und Dateipfad zugreifen können. – Jacky

Antwort

2

Sie müssen eine Aktion in Ihrem Controller haben, die FileResult zurückgibt, und innerhalb dieser Aktion werden Sie die Datei von F: \ Drive lesen und als StreamResult oder FileResult zurückgeben, dann in Ihrer JQuery, anstatt die Datei zu schreiben Name, werden Sie das @ Url.Actiont zur Ausgabe der URL für die Aktion verwenden, um die Datei abruft, auf diese Weise wird es immer schauen, wie es in Ihrem wwwroot gespeichert wurde

function Download(pClientid) { 

    $.ajax(
    { 
     type: "GET", 
     cache: false, 
     data: { ClientId: pClientid }, 
     dataType: "json", 
     cache: false, 
     url: '@Url.Action("actionName","ControllerName")', 
     headers: { 
      'VerificationToken': forgeryId 
     }, 
     success: function (data) { 
      ShowFiepopup(data); 
     } 
    }); 
} 
+0

Vielen Dank für Ihre Nachricht. Ich werde versuchen, wie du es jetzt gesagt hast. –

+0

Kann ich einen nützlichen Link wie man jquery mit @ url.action verwenden, besonders wenn es um Dateien geht! –

+0

Ich habe meine Antwort mit einer Probe aktualisiert, wie Sie es in Ihre jquery Funktion einfügen können. –

Verwandte Themen