ASP.NET MVC 附件列表(来自二进制数据)
ASP.NET MVC List of attachments (from binary data)
使用 ASP.NET MVC 和 SQL Server 2016。我的附件以二进制数据形式存储在 SQL 服务器中。
Table 数据如下:
attachment_ID | attachment_GUID | attachment_data | attachment_name|
--------------|------------------|-----------------|----------------|
211 | A893C2Z1-4C0 | 0x255044462... | file1.doc |
212 | A893C2R5-4F0 | 0x255044455... | file5.pdf |
我需要在 html 页面中显示此附件(名称)的列表,作为超链接。因此,如果我单击附件名称,它应该会开始下载过程。
需要有关 ASP.NET MVC 控制器的帮助。
我有直接下载文件的控制器:
using System;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Collections.Generic;
namespace Project.SERVER.Controllers
{
public class AttachmenttoHTMLController : Controller
{
#region View attachments
[HttpGet]
public ActionResult Get()
{
SqlConnection connection = Project.SERVER.Classes.INT_DataBase.getConnection();
SqlCommand command = new SqlCommand("SELECT * FROM AllAttachments WHERE document_GUID='F3A2AC32-D98D'", connection);
command.Dispose();
SqlDataAdapter sqlDtAdptr = new SqlDataAdapter(command);
System.Data.DataTable result = new System.Data.DataTable();
result.Dispose();
sqlDtAdptr.Fill(result);
sqlDtAdptr.Dispose();
connection.Dispose();
connection.Close();
if (result.Rows.Count > 0 && !System.Convert.IsDBNull(result.Rows[0]["attachment_data"]))
{
byte[] file = (byte[])result.Rows[0]["attachment_data"];
Response.ContentType = result.Rows[0]["attachment_contentType"].ToString();
return File(file, Response.ContentType, result.Rows[0]["attachment_fileName"].ToString());
}
else return new EmptyResult();
}
#endregion
}
}
我应该在代码中添加什么来实现附件列表的控制器,点击时可以选择下载?
您必须先将二进制数据以图像格式保存到您的目录项目中。
使用FileResult
HTML:
<div>
@Html.ActionLink("Download", "Download", "Home");
</div>
家庭控制器:
public FileResult Download()
{
String path = HostingEnvironment.ApplicationPhysicalPath + "Image\Capture.PNG";
string fname= Path.GetFileName(path);
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = fname;
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
假设您的模型中有一个列表
List<Attachment> lst = new List<Attachment>();
此列表是您数据库中的数据内容,并将字节以图像格式保存到您的项目文件夹中。
你上面的代码应该在这里保存字节,文件名甚至 id
.PNG 或任何。添加 lst.id
和 lst.filename
用于 html 目的。
public class Attachment
{
public int id { get; set; }
public string filename { get; set; }
}
你的 HTML 看起来像:
<table>
@{
if (Models.GetAttachment.lst.Count > 0)
{
for (int m = 0; m < Models.GetAttachment.lst.Count; m++)
{
<tr>
<td>
@Html.ActionLink("Download", "Download", new { id = Models.GetAttachment.lst.Coun[m].id })
</td>
</tr>
}
}
}
</table>
HomeController 与 id
:
public FileResult Download(int?id)
{
String path = HostingEnvironment.ApplicationPhysicalPath + "Image\Capture.PNG";
string fname= Path.GetFileName(path);
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = fname;
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
id
的目的是为每次用户点击在您的项目目录中找到文件。
使用 ASP.NET MVC 和 SQL Server 2016。我的附件以二进制数据形式存储在 SQL 服务器中。
Table 数据如下:
attachment_ID | attachment_GUID | attachment_data | attachment_name|
--------------|------------------|-----------------|----------------|
211 | A893C2Z1-4C0 | 0x255044462... | file1.doc |
212 | A893C2R5-4F0 | 0x255044455... | file5.pdf |
我需要在 html 页面中显示此附件(名称)的列表,作为超链接。因此,如果我单击附件名称,它应该会开始下载过程。
需要有关 ASP.NET MVC 控制器的帮助。
我有直接下载文件的控制器:
using System;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Collections.Generic;
namespace Project.SERVER.Controllers
{
public class AttachmenttoHTMLController : Controller
{
#region View attachments
[HttpGet]
public ActionResult Get()
{
SqlConnection connection = Project.SERVER.Classes.INT_DataBase.getConnection();
SqlCommand command = new SqlCommand("SELECT * FROM AllAttachments WHERE document_GUID='F3A2AC32-D98D'", connection);
command.Dispose();
SqlDataAdapter sqlDtAdptr = new SqlDataAdapter(command);
System.Data.DataTable result = new System.Data.DataTable();
result.Dispose();
sqlDtAdptr.Fill(result);
sqlDtAdptr.Dispose();
connection.Dispose();
connection.Close();
if (result.Rows.Count > 0 && !System.Convert.IsDBNull(result.Rows[0]["attachment_data"]))
{
byte[] file = (byte[])result.Rows[0]["attachment_data"];
Response.ContentType = result.Rows[0]["attachment_contentType"].ToString();
return File(file, Response.ContentType, result.Rows[0]["attachment_fileName"].ToString());
}
else return new EmptyResult();
}
#endregion
}
}
我应该在代码中添加什么来实现附件列表的控制器,点击时可以选择下载?
您必须先将二进制数据以图像格式保存到您的目录项目中。
使用FileResult
HTML:
<div>
@Html.ActionLink("Download", "Download", "Home");
</div>
家庭控制器:
public FileResult Download()
{
String path = HostingEnvironment.ApplicationPhysicalPath + "Image\Capture.PNG";
string fname= Path.GetFileName(path);
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = fname;
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
假设您的模型中有一个列表
List<Attachment> lst = new List<Attachment>();
此列表是您数据库中的数据内容,并将字节以图像格式保存到您的项目文件夹中。
你上面的代码应该在这里保存字节,文件名甚至 id
.PNG 或任何。添加 lst.id
和 lst.filename
用于 html 目的。
public class Attachment
{
public int id { get; set; }
public string filename { get; set; }
}
你的 HTML 看起来像:
<table>
@{
if (Models.GetAttachment.lst.Count > 0)
{
for (int m = 0; m < Models.GetAttachment.lst.Count; m++)
{
<tr>
<td>
@Html.ActionLink("Download", "Download", new { id = Models.GetAttachment.lst.Coun[m].id })
</td>
</tr>
}
}
}
</table>
HomeController 与 id
:
public FileResult Download(int?id)
{
String path = HostingEnvironment.ApplicationPhysicalPath + "Image\Capture.PNG";
string fname= Path.GetFileName(path);
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = fname;
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
id
的目的是为每次用户点击在您的项目目录中找到文件。