2016-09-23 4 views
0

私はサーバーからファイルをダウンロードしたいが、私が間違っていることを理解していない。私はそれを行う方法を探していますが、動作しません。ASP NET MVC 4:angularJsで表示するためにコントローラからファイルを返すには?

public HttpResponseMessage GetFile(string filename) 
     { 
      try 
      { 
       if (!string.IsNullOrEmpty(filename)) 
       { 
        //string filePath = HttpContext.Current.Server.MapPath("~/App_Data/") + fileName; 
        DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Documentos")); 
        string filePath = dirInfo.FullName + @"\" + filename; 

        using (MemoryStream ms = new MemoryStream()) 
        { 
         using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 
         { 
          byte[] bytes = new byte[file.Length]; 
          file.Read(bytes, 0, (int)file.Length); 
          ms.Write(bytes, 0, (int)file.Length); 

          HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); 
          httpResponseMessage.Content = new ByteArrayContent(bytes.ToArray()); 
          httpResponseMessage.Content.Headers.Add("x-filename", filename); 
          httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");//application/octet-stream 
          httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
          httpResponseMessage.Content.Headers.ContentDisposition.FileName = file.Name; 
          httpResponseMessage.StatusCode = HttpStatusCode.OK; 
          return httpResponseMessage; 
         } 
        } 
       } 
       return new HttpResponseMessage(HttpStatusCode.NotFound); 
      } 
      catch (Exception) 
      { 
       return new HttpResponseMessage(HttpStatusCode.BadRequest); 
      } 
     } 

角度コントローラ::私は、ファイルをロードすると

$scope.downloadFiles = function() { 
     var filename = "aae49c8e-c523-4ccc-a7ba-88f405072047&file.pdf";   
     $http({ 
       method: 'GET', 
       url: 'serv/Consultas/GetFile', 
       params: { filename: filename }, 
       responseType: "arraybuffer" 
     }).success(function (response) { 
      var file = new Blob([(response)], { type: 'application/pdf' }); 
      var fileURL = URL.createObjectURL(file); 
      $window.open(fileURL);      
     }).error(function (data, status) { 
     console.log("Request failed with status: " + status); 
     }); 
    } 

は、私はちょうど「不完全なファイル名を取得aae49c8e-

コントローラ(ASP NET MVC):これは私が見つけた例です。 c523-4ccc-a7ba-88f405072047 "と入力し、ファイルをロードしないでください。助けてくれてありがとう。

+0

フレンドリーリマインダー:答えを受け入れる。 – SovietPanda

答えて

3

ストリームサーバからファイル:

public FileStreamResult GetFile(string filename) 
{ 
    try 
    { 
     if (!string.IsNullOrEmpty(filename)) 
     { 
      //string filePath = HttpContext.Current.Server.MapPath("~/App_Data/") + fileName; 
      DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Documentos")); 
      string filePath = dirInfo.FullName + @"\" + filename; 

      FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
      return File(fs, "application/pdf"); 
     } 
     return new HttpResponseMessage(HttpStatusCode.NotFound); 
    } 
    catch (Exception) 
    { 
     return new HttpResponseMessage(HttpStatusCode.BadRequest); 
    } 
} 

それがブラウザに表示できるようにPDFをストリーミングするアクションメソッドへのURLを持つ新しいウィンドウが開きます:

var fileURL = 'serv/Consultas/GetFile?filename=file.pdf'; 
$window.open(fileURL); 
+0

あなたの提案を検証するために名前を変更しましたが、ファイルを読み込もうとしたときに "localhost:58334/53464c98-71b5-4e3c-afd7-0ad334490255"と表示されました。 = "file.pdf"私の問題は角度コントローラにあると思いますが、ファイルを受信して​​ダウンロードする例はありますか? –

+0

角度コードから、PDFファイルをダウンロードしてから変換し、ウィンドウに表示しているようです。私はあなたがブラウザ上でPDFを見ることができるようにこれをやっていると仮定しています。これは正しいです? –

+0

はい、PDFファイルを表示したいと思います。別のオプションは、単純なリンクでPDFファイルをダウンロードすることです。 –

関連する問題