2016-09-20 12 views
0

私はMVC5プロジェクトを持っており、ユーザーはSQL Serverからドキュメントをダウンロードできるビューを持っています。このビューは、ユーザーが任意のファイルタイプをアップロードできる1つまたは複数のファイル入力コントロールを含むフォームページです。ユーザーがデスクトップからファイルを選択して入力ファイルボックスに入れ、送信ボタンをクリックすると、ファイルはバイト[]型に変換され、SQL Serverに保存されます。ファイルがアップロードされると、ユーザーは同じページを再び開き、ダウンロードリンクがコントロールに表示されます。ユーザーがファイルをクリックすると、そのファイルはデスクトップに保存されませんが、ユーザーがリンクを右クリックして新しいタブで開くと、ファイルをダウンロードできます。ダウンロードMVC5からWebブラウザからデスクトップにファイル

FillTemplateFields.cshtml

@{ 
    string[] fileUploadItems = @value.Split(','); 
} 

@for (int k = 0; k < @fileUploadItems.Length; k++) 
{ 
    <div id="[email protected]"> 
    @if(fileUploadItems[k] != null){ 
     <input id="[email protected]" type="file" value="@fileUploadItems[k]" placeholder="@control.Placeholder" name="[email protected]" data-sub-channel="[email protected]"> 

     @Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null) 
     <br /> 
} 
else 
{ 
    <input id="[email protected]" type="file" value="" placeholder="@control.Placeholder" name="[email protected]" data-sub-channel="[email protected]"> 
} 

<a id="[email protected]" href="#">Delete</a> 

「fileUploadItems」オブジェクトは、アップロードコントロールに保存したファイル名が含まれています。ここでは、ユーザーがアップロードコントロールからファイルをダウンロードすることができますビューページから、次の抜粋です。 Ajax.ActionLinkヘルパーは、フィールド化された値とファイル名を渡す 'DowloadFile'メソッドを呼び出すリンクを作成し、Sql Serverに保存されたファイルを検索します。

TemplateValuesController.cs

public FileResult DownloadFile(int fieldID, string fileName) 
    { 
     tbl_FileStorage file = db.tbl_FileStorage.Where(f => f.FileName == fileName && f.TemplateFieldValuesID == fieldID).First(); 
     return File(file.File, System.Net.Mime.MediaTypeNames.Application.Octet, file.FileName); 
    } 

私は、ダウンロードリンクを右クリックしてファイルを正常にダウンロードして、新しいタブを開いたが、同じページに滞在しながら、私はそれをダウンロードすることができない、と私はストリーミングするつもりはないよ可能新しいブラウザタブのファイル。誰かが私にしたいことに私に解決策を与えることができますか?ありがとうございました。

+0

アクションリンクにtarget = "_ blank"属性を追加してみてください –

+0

あなたの質問はすでにここで回答されているようです:http://stackoverflow.com/questions/730699/how-can-i-present-a-file-for -download-from-an-mvc-controller – easuter

+0

@BashkimMeka私はあなたの提案を試みました。私はactionlinkヘルパーに属性target = "_ blank"を追加し、リンクをクリックして、ダウンロードしたいファイルをダウンロードしなかった。 –

答えて

0

問題は解決されました。私は "FillTemplateFields.cshtml"ページでコードの1行を変更して修正しました。変更

@Html.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }) 

変更

@Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null) 

私は、変更を行った後、ダウンロードリンクが検出されたページに滞在し、持っていないながら、私は自分のデスクトップにファイルをダウンロードすることができます新しいタブでリンクを開きます。

関連する問題