オブジェクトのテーブルを含むWebページがあります。
私のオブジェクトプロパティの1つはファイルパスです。このファイルは同じネットワーク内にあります。私がしたいことは、リンクの下にこのファイルパスをラップし(たとえば、ダウンロード)、ユーザーがこのリンクをクリックした後、ファイルがユーザーのマシンにダウンロードされます。
だから私のテーブルの中:
@foreach (var item in Model)
{
<tr>
<th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th>
<td width="1000">@item.fileName</td>
<td width="50">@item.fileSize</td>
<td bgcolor="#cccccc">@item.date<td>
</tr>
}
</table>
私はこのダウンロードリンクを作成しました:
<th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th>
このダウンロードリンクでfile path
をラップし、リンクをクリックするとコントローラーに寄りかかります。
public FileResult Download(string file)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(file);
}
それを達成するためにコードに何を追加する必要がありますか?
アクションからFileContentResultを返します。
public FileResult Download(string file)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(file);
var response = new FileContentResult(fileBytes, "application/octet-stream");
response.FileDownloadName = "loremIpsum.pdf";
return response;
}
そしてダウンロードリンク、
<a href="controllerName/[email protected]" target="_blank">Download</a>
このリンクは、パラメーターfileNameを使用して、ダウンロードアクションへのgetリクエストを作成します。
編集:見つからないファイルについては、
public ActionResult Download(string file)
{
if (!System.IO.File.Exists(file))
{
return HttpNotFound();
}
var fileBytes = System.IO.File.ReadAllBytes(file);
var response = new FileContentResult(fileBytes, "application/octet-stream")
{
FileDownloadName = "loremIpsum.pdf"
};
return response;
}
ビューで、次のように記述します。
<a href="/ControllerClassName/DownloadFile?file=default.asp" target="_blank">Download</a>
コントローラで、次のように記述します。
public FileResult DownloadFile(string file)
{
string filename = string.Empty;
Stream stream = ReturnFileStream(file, out filename); //here a backend method returns Stream
return File(stream, "application/force-download", filename);
}
それぞれのコントローラファイルでこのコードを使用します。
public ActionResult Index()
{
foreach (string upload in Request.Files)
{
if (Request.Files[upload].FileName != “”)
{
string path = AppDomain.CurrentDomain.BaseDirectory + “/App_Data/uploads/”;
string filename = Path.GetFileName(Request.Files[upload].FileName);
Request.Files[upload].SaveAs(Path.Combine(path, filename));
}
}
return View(“Upload”);
}
この例は私にとってはうまくいきます:
public ActionResult DownloadFile(string file="")
{
file = HostingEnvironment.MapPath("~"+file);
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var fileName = Path.GetFileName(file);
return File(file, contentType,fileName);
}
表示:
< script >
function SaveImg()
{
var fileName = "/upload/orders/19_1_0.png";
window.location = "/basket/DownloadFile/?file=" + fileName;
}
< /script >
<img class="modal-content" id="modalImage" src="/upload/orders/19_1_0.png" onClick="SaveImg()">