在MVC3下载更改文件名
问题:我从数据库中其ID命名的文件。当有人想减少它时,我需要将它改为它的真名。服务器上的文件看起来像例如:http://localhost:34256/Content/uploads/23。因此,例如我的文件名是,但我需要将其更改为textfile1.txt。在MVC3下载更改文件名
我已创建了这些文件的列表中的部分观点:
@foreach (var item in Model)
{
<a href="/Content/uploads/@item.Id" title="@Html.Encode(item.FileName)">
<img src="@item.IcoSrc" /><br />
@item.FileName
</a>
}
哪里@item.FileName
是文件的真实姓名。当有人从该列表下载文件,他得到的文件名为@ item.Id,而不是@ item.FileName。我该如何改变它?
我正在使用MVC3和.NET framevork 4.
任何帮助非常感谢!
您可以创建一个控制器行动,这将有助于该文件:
public ActionResult Download(string id, string name)
{
var file = Server.MapPath("~/Content/uploads/" + id);
return File(file, "application/octet-stream", name);
}
再点连结此控制器操作:
@foreach (var item in Model)
{
<a href="@Url.Action("Download", new { id = item.Id, name = item.FileName })" title="@Html.Encode(item.FileName)">
<img src="@item.IcoSrc" /><br />
@item.FileName
</a>
}
它完美地工作。非常感谢! – Marta
你不能做到这一点在链接到文件。您必须通过在将文件传回客户端的响应中设置Content-Disposition
标题来完成此操作。
请参阅本SO张贴更多的信息:https://*.com/q/3102276/280222
由于您使用MVC,你可以创建一个返回FileContentResult
的动作。
阅读这篇文章的详细信息:http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files
下面的代码片断是从文章中提取。请注意,您可以控制文件名属性:
public FileContentResult GetFile(int id)
{
SqlDataReader rdr; byte[] fileContent = null;
string mimeType = "";string fileName = "";
const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";
using (var conn = new SqlConnection(connect))
{
var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID";
var cmd = new SqlCommand(qry, conn);
cmd.Parameters.AddWithValue("@ID", id);
conn.Open();
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
fileContent = (byte[])rdr["FileContent"];
mimeType = rdr["MimeType"].ToString();
fileName = rdr["FileName"].ToString();
}
}
return File(fileContent, mimeType, fileName);
}
的OP的实际文件并不存储到数据库中。它们驻留在〜/ Content/uploads文件夹中。 –
fileContent变量包含要作为文件提供的流。 fileName定义了文件的所需名称。您可以通过任何您需要的方式设置这些变量以实现相同的目的,从任何来源提供内容。 – agarcian
正如安德斯说,你需要使用Content-Disposition
。
为此,创建一个控制器衍生物具有.e.g Download
的方法,即采用该文件的ID。然后您可以读取ID(并获取原始文件名),并使用FileResult
类传递文件(您可以使用FileDownloadName
属性设置文件名,该属性将为您设置配置
您可以在此[文章]通过HTTP标头更改文件名,如(HTTP:/ /*.com/questions/93551/how-to-encode- content-disposition-header-in-http) – Madd0g
Content-Disposition可用于指定文件名。看看http://*.com/questions/5826649/returning-a-file-to-view-download-in-mvc –