2016-03-30 7 views
2

この投稿を編集して、最新の提案を下記に示します。 解決策を探しているフォーラムを検索しています。私はAngularを使用するASP.NET MVCアプリケーションを持っています。私はdanialfarid/ng-file-uploadを使用して、ユーザーがPDFをアップロードしてバイナリデータとしてデータベースに保存できるようにしようとしています(私の考えではありませんが、そうしなければなりません)。Ng-File-Uploadを使用してPDFにBLOBを保存する

I持って私の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> 

そして、この私の角度コントローラで:

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

私のMVCコントローラ:

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(); 


     } 
    } 
} 

このコードは、MVCコントローラにはまったくヒットしません。私は明らかに何かが欠けているが、それが何であるかについて少しでも手がかりがない。どんな支援も大歓迎です!

答えて

1

あなたは、フォームデータのうち、ファイルの内容を抽出する必要があります。

以下は、アプリケーションで添付ファイルをアップロードする方法です(フロントエンドと同じ方法でng-file-uploadを使用します)。

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

これは私にすべてのタイプのエラーを与えます:System.Web.HttpRequestBaseに 'Content'の指定が含まれていません、 'PAth'は現在のコンテキストに存在しません '、名前 "BadRequest"は現在のコンテキストに存在しません。これには、他の多くのコードやusingステートメントが欠落している必要があります。他に何が必要なのか教えていただけますか? –

+0

これは私にあらゆる種類のエラーを与えていましたが、少しの研究で私はApiControllerから継承する必要があることがわかりました。ただし、次のコードを使用します。$ scope.uploadPic = function(file){ file.upload = Upload.upload({ URL: '/ SSQV4/SSQV5/Document/UploadEMRDocument'、 data:{file:file} } ) }これは決してコントローラメソッドには当てはまりません。私は何が欠けていますか? –

1

アップロードを設定する場合、ファイルがに掲載されますURLを指定:

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

私はそれを試みました。それがMVCコントローラに当たると、それはヌルです。 –

関連する問題