2016-03-30 3 views
2

Ich bearbeite diesen Beitrag, um meinen neuesten Versuch per Vorschläge unten zu zeigen. Ich habe die Foren gesucht, um eine Lösung zu finden. Ich habe eine ASP.NET MVC-Anwendung, in der ich Angular verwende. Ich versuche, danialfarid/ng-file-upload zu verwenden, um Benutzern zu ermöglichen, PDFs hochzuladen, die dann in der Datenbank als binäre Daten gespeichert werden (nicht meine Idee, aber ich muss es so machen).Ng-Datei-Upload zum Speichern von PDF-Blob zur Datenbank

Ich habe die folgenden (aus den Beispielen genommen) in meinem HTML:

    File:<input type="file" ngf-select ng-model="picFile" name="file" accept="image/*" ngf-max-size="2MB" required ngf-model-invalid="errorFile"><br /> 
       <img ngf-thumbnail="picFile" class="thumb"> <button ng-click="picFile = null" ng-show="picFile">Remove</button><br /> 
       <button type="button" class="btn btn-primary" ng-click="uploadPic(picFile)">Upload</button> 

Und dies in meinem Winkelregler:

$scope.uploadPic = function (files) { 
    file.upload = Upload.upload({ 
     url: '/SSQV4/SSQV5/Document/UploadEMRDocument', 
     data: {file: files} 
    }) 
} 

Meine MVC Controller:

namespace SSQV5.Controllers 
{ 
    public class DocumentController : ApiController 
    { 

     public async Task<IHttpActionResult> UploadEMRDocument() 
     { 
      try 
      { 
       var provider = new MultipartMemoryStreamProvider(); 
       await Request.Content.ReadAsMultipartAsync(provider); 

       var f = provider.Contents.First(); // assumes that the file is the only data 

       if (f != null) 
       { 
        var filename = f.Headers.ContentDisposition.FileName.Trim('\"'); 
        filename = Path.GetFileName(filename); 
        var buffer = await f.ReadAsByteArrayAsync(); 

        //buffer now contains the file content, 
        //and filename has the original filename that was uploaded 

        //do some processing with it (e.g. save to database) 
       } 
       else 
       { 
        return BadRequest("Attachment failed to upload"); 
       } 
      } 
      catch (Exception ex) 
      { 
       return BadRequest(ex.Message); 
      } 

      return Ok(); 


     } 
    } 
} 

Dieser Code trifft den MVC Controller überhaupt nicht. Mir fehlt offensichtlich etwas, aber ich habe nicht den geringsten Hinweis darauf, was es sein könnte. Jede Hilfe wird sehr geschätzt!

Antwort

1

Sie müssen aus den Formulardaten den Dateiinhalt extrahieren.

Unten ist, wie ich dies (unter Verwendung ng-file-upload in der gleichen Weise wie Sie von der Front-End) zum Hochladen von Anlagen in meiner Anwendung tun.

public async Task<IHttpActionResult> UploadAttachment() 
{ 
    // Check if the request contains multipart/form-data. 

    try 
    { 
     var provider = new MultipartMemoryStreamProvider(); 
     await Request.Content.ReadAsMultipartAsync(provider); 

     var f = provider.Contents.First(); // assumes that the file is the only data 

     if (f != null) 
     { 
      var filename = f.Headers.ContentDisposition.FileName.Trim('\"'); 
      filename = Path.GetFileName(filename); 
      var buffer = await f.ReadAsByteArrayAsync(); 

      //buffer now contains the file content, 
      //and filename has the original filename that was uploaded 

      //do some processing with it (e.g. save to database) 
     } 
     else 
     { 
      return BadRequest("Attachment failed to upload"); 
     } 
    } 
    catch (Exception ex) 
    { 
     return BadRequest(ex.Message); 
    } 

    return Ok(); 
} 
+0

Dies gibt mir alle Arten von Fehlern: System.Web.HttpRequestBase enthält keine Definition für 'Inhalt', Der Name 'PAth' existiert nicht im aktuellen Kontext ', der Name' BadRequest 'existiert nicht im aktuellen Kontext . Dies muss viele andere Code- oder Using-Anweisungen enthalten. Kannst du mir bitte sagen, was noch benötigt wird? –

+0

Dies gab mir alle möglichen Fehler, aber ein wenig Forschung zeigte, dass ich von einem ApiController erben muss. Verwenden Sie jedoch diesen Code: $ scope.uploadPic = function (file) { file.upload = Upload.upload ({ URL: '/ SSQV4/SSQV5/Dokument/UploadEMRDocument', Daten: {Datei: Datei} }) } es trifft nie die Controller-Methode. Was vermisse ich? –

1

Wenn Sie den Upload konfigurieren, können Sie die URL angeben, in dem die Datei geschrieben werden:

file.upload = Upload.upload({ 
     url: 'myMVC/MyMethod', 
     data: {file: file} 
    }) 
+0

Ich habe das versucht. Wenn es den MVC Controller trifft, ist es null. –