下载文件在ASP mvc .net
问题描述:
我把下载链接在jqgrid中,我的文件存储在服务器上不在数据库中,文件是不同类型的(扩展名) 我想用户应该下载文件时,他点击下载链接下载文件在ASP mvc .net
代码加载的jqGrid是Follws
public object GetJSONFormatProjectDetails(List<ProjectMasterDTO> listProjectDTO, int SkipCount)
{
var data = (listProjectDTO.Select(c => new
{
id = c.ProjectID,
cell = new[]
{
c.ProjectName,
c.OfficeName,
c.ProjectType,
c.ProjectNature,
c.EntrepreneurName,
c.Year + " Years " +c.Month + " Months " + c.Day + " Days" ,
c.ConcessionWEFdate,
c.ProjectStartDate,
c.ProjectEndDate,
c.isRoadApplicable,
(c.FilePath != "NA") ? "<a href='#' style='color:green' onclick='DownLoadFile(\""+URLEncrypt.EncryptParameters(new string[]{ "filepath =" +c.FilePath.Replace("/","$").Replace(" ","#").Trim()})+"\");return false;'>"+(c.FilePath != "NA" ? "DownLoad":"Not Available") + " </a>" : "<span style='color:Red' >Not Available</span>"
}
})).ToArray().Skip(SkipCount);
return data;
}
JS文件的代码如下
function DownLoadFile(param) {
$.ajax({
url: "/Home/GetFile?parameter=" + param,
cache: false,
type: "POST",
async: false
});
}
守则控制器如下现在
public ActionResult GetFile(string parameter)
{
string queryStringParameters = Request.QueryString["parameter"];
if (queryStringParameters == null)
{
throw new Exception("Url is tampered");
}
string[] parameterArray = queryStringParameters.Split('/');
string param = null;
string hash = null;
string key = null;
if (parameterArray.Length == 3)
{
param = parameterArray[0];
hash = parameterArray[1];
key = parameterArray[2];
}
if (!(string.IsNullOrEmpty(parameter)))
{
Dictionary<string, string> parameters = URLEncrypt.DecryptParameters(new string[] { param, hash, key });
string FilePath =string.Empty ;
parameters.TryGetValue("filepath", out FilePath);
FilePath = FilePath.Replace('$','\\');
// DownloadFile(FilePath);
string name = Path.GetFileName(FilePath);
string ext = Path.GetExtension(FilePath);
string type = "";
// set known types based on file extension
if (ext != null)
{
switch (ext.ToLower())
{
case ".pdf":
type = "Application/pdf";
break;
case ".doc":
case ".docx":
type = "Application/msword";
break;
case ".jpg":
case ".bmp":
case ".tiff":
case ".png":
case ".gif":
case ".jpeg":
type = "Application/Image";
break;
default:
type = "Application";
break;
}
}
Response.AppendHeader("content-disposition", "attachment; filename=" + name);
if (type != "")
{
Response.ContentType = type;
}
String FullFilePath = @"F:\MHTOLL\ContractUploadDetails\" + name;
//return File(new FileStream(path + fileName, FileMode.Open), "text/plain", fileName);
// return File(new FileStream(FullFilePath, FileMode.Open), type, name);
return File(FullFilePath, type,name);
}
return null;
}
不介意关于返回空值和异常处理
还表明显示.gif注意动画下载文件。
答
我不认为你可以使用AJAX调用来下载文件。
我觉得这个答案会让你得到你想要的。请务必阅读有关下载提示和MIME类型的注释。 Download File Using Javascript/jQuery
答
我最近遇到同样的问题,并意识到AJAX将无法下载文件。尝试一个ActionLink的,而不是:
@Html.ActionLink("ButtonName", "controllerFunctionName", "controllerName", new { functionParamName = paramValue })
你将包括控制器的功能:
public ActionResult controllerFunctionName(type functionParamName){ // do your download here }
简单地说,AJAX不能很好地与Response.function调用工作。然而,我没有理由说,如果有人能为我解释这一点,我将不胜感激。 – lohiaguitar91 2013-03-27 01:19:37
这里是我最初发布我的问题:http://stackoverflow.com/questions/15458477/response-writefile-not-working-asp-net-mvc-4-5/15577763#15577763。我使用AJAX,但没有看到这个问题。我认为这个bug是在控制器功能中。 – lohiaguitar91 2013-03-27 01:21:07