2016-06-13 2 views
0

hochlädt Ich habe gekämpft, um dies richtig zu machen, und benötigen Beratung über Best Practices in Bezug auf MVC-Anwendungen, die Client-Datei auf dem Benutzercomputer lesen. Meine Anwendung muss eine Excel-Datei auf den Webserver hochladen und dann eine Validierung für diese Datei durchführen. Ich habe Mühe, dies zum Laufen zu bringen. Ich weiß, dass es ein Sicherheitsrisiko ist, Dateien von Benutzern zu lesen Aufgabe, da Benutzer die Datei hochladen müssen, damit die Anwendung sie verarbeiten kann. Ich habe versucht, die Datei auf dem Server zu speichern, aber ich bekomme unzählige Ausnahmen, dass entweder die Datei oder ein Teil der Datei nicht gefunden werden kann, oder der Dateibenutzer nicht auf die Datei sowohl IE und Chrome zugreifen kann, habe ich in meinem lokalen Rechner getestet und Alles scheint gut zu funktionieren, mein einziges Problem kommt, wo ich es auf dem Server bereitstellen. Ich habe versucht, die Anwendung unter einem bestimmten Benutzer auszuführen und diesen Benutzer Zugriff auf den Anwendungsordner, in dem ich die Datei auf dem Webserver speichern, aber immer noch nicht funktioniert, habe ich mit ApplicationPoolIdentity versucht, aber nicht richtig kommen. Was ist der beste Weg und die empfohlene Vorgehensweise zum Ausführen einer solchen Aufgabe in einer MVC-Anwendung, die in IIS8 auf einem Windows Server 2012 R2 gehostet wird? Bitte sehen Sie unten die Methoden, die ich versuchte, die Datei zu speichern, aber sie funktionieren nicht, sobald sie bereitgestellt wurden.MVC-Anwendung, die eine Benutzerdatei auf den Server

Methode 1 - Hier habe ich versucht Server.Map mit

public ActionResult Upload(HttpPostedFileBase file) 
    { 

     List<CleanSupplierClaim> supplierClaimsData = new List<CleanSupplierClaim>(); 

     try 
     { 
      if (file.ContentLength > 0) 
      { 

       var fileName = Path.GetFileName(file.FileName); 
       var targetPath = Server.MapPath(@"~/upload"); 

       file.SaveAs(Path.Combine(targetPath, fileName)); 

Methode 2 - Hier habe ich versucht, auf das Anwendungsverzeichnis Speichern, wo seine gehostet.

List<CleanSupplierClaim> supplierClaimsData = new List<CleanSupplierClaim>(); 

     try 
     { 
      if (file.ContentLength > 0) 
      { 

       var fileName = Path.GetFileName(file.FileName); 


       var targetPath = @"\\servername\C$\inetpub\wwwroot\GpVisibilityUploadQA\upload\" + fileName; 
       file.SaveAs(targetPath); 

Was ist der beste Weg, dies zu tun. Ich bin wirklich festgefahren. Bitte helfen Sie.

+2

Bitte senden Sie die Ausnahmebedingung auf dem Server. – Win

+0

@Win Die Datei 'C: \ Users \ Meinename \ Documents \ Test_GP_Upload.xlsx' konnte nicht gefunden werden. Dies ist in IE und konnte Datei 'c: \ windows \ system32 \ inetsrv \ GPUpload.xlsx' nicht finden. Das ist in Chrome. Irgendeine Idee, was hier passiert, habe ich die Location in meiner Anwendung als var targetPath = Server.MapPath (@ "~/upload"); – Papi

Antwort

0

Hier ist die Razor-Syntax für eine schnelle Upload-Box (Unter der Annahme, Heimsteuerung)

@using (Html.BeginForm("Upload", 
            "Home", 
            FormMethod.Post, 
            new { enctype = "multipart/form-data" })) 
{ 
    <label for="file">Upload File:</label> 
    <input type="file" name="file" id="file" /><br><br> 
    <input type="submit" value="Upload File" /> 
    <br><br> 
} 

Und hier ist die Controller-Methode der byte [] für diese Datei

für den Erhalt
[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 
    BinaryReader b = new BinaryReader(file.InputStream); 
    byte[] binData = b.ReadBytes((int)file.InputStream.Length); 
} 

Sobald Sie das Byte [] Sie können es einfach auf dem Server in temp schreiben und alle gewünschten Validierungen/Manipulationen durchführen

Verwandte Themen