文件从MVC2中的文件夹下载文件时出错

时间:2013-05-22 07:50:01

标签: asp.net-mvc

我在获取下载提示时遇到问题。在下面的代码中,首先允许用户上传文件进行压缩。压缩文件后,应向用户提供压缩文件。但在下面的代码下载提示不会出现,也不会显示任何错误。请纠正我的代码来帮助我 观看代码:

function CompressFile(box) {
   var file = document.getElementById('fileComp');
   if (file.value == "") {
       alert("Choose a file to upload");
       return false;
   }
   dhtmlx.modalbox.hide(box);
   var fd = new FormData();
   fd.append('file', file.files[0]);
   var xhr = new XMLHttpRequest();
   xhr.open('POST', '/FileUpload/Compress', true);
   xhr.send(fd);

}

控制器代码:

 public ActionResult Compress(HttpPostedFileBase file)
{
    var supportedType = new[] { "pdf" };
    var fileExt = System.IO.Path.GetExtension(file.FileName).Substring(1);
    var filename = Path.GetFileNameWithoutExtension(file.FileName) ?? "";
    if (file.ContentLength > 0 && supportedType.Contains(fileExt))
    {
        string filePath = Path.Combine(HttpContext.Server.MapPath(_uploadPDF), Path.GetFileName(file.FileName));
        file.SaveAs(filePath);
        PdfReader reader = new PdfReader(filePath);
        string name = DateTime.Now.ToString("ddMM_HHmmss");
        name = Server.MapPath(_fileUploadPath + name + ".pdf");
        PdfStamper stamper = new PdfStamper(reader, new FileStream(name, FileMode.Create), PdfWriter.VERSION_1_5);
        stamper.FormFlattening = true;
        stamper.SetFullCompression();
        stamper.Close();
        string fn = System.IO.Path.GetFileName(name);
        return base.File(name, "application/pdf",fn);
    }
    else
    {
        return View();
    }
}

1 个答案:

答案 0 :(得分:0)

问题是你正在使用Ajax。您无法通过Ajax下载文件。您需要对ActionMethod进行常规POST。这样浏览器就可以将文件发回给您并提示用户将其保存在哪里。