System.IO.File.Create file无法下载?在MVC 5中

本文关键字:MVC 下载 File IO Create file System | 更新日期: 2023-09-27 18:17:24

System.IO.File.Create创建的文件不能像HttpPostedFileBase.SaveAs创建的文件一样下载

我代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult SaveasMP4(HttpPostedFileBase file)
    {
        try
        {
            if (file != null && file.ContentLength > 0)
            {
                string extension = Path.GetExtension(file.FileName);
                var path = Path.Combine(Server.MapPath("~/Data/"), file.FileName);
                file.SaveAs(path);
                if (!extension.Equals(".mp4"))
                {
                    var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
                    string tempFileName = path.Substring(0, path.LastIndexOf('.')) + ".mp4";
                    using (FileStream fileStream = System.IO.File.Create(Path.Combine(Server.MapPath("~/Data/"), tempFileName)))
                    {
                        ffMpeg.ConvertMedia(path, fileStream, Format.mp4);
                    }
                    if (System.IO.File.Exists(path))
                    {
                        System.IO.File.Delete(path);
                    }
                }
            }
        }
        catch (Exception e)
        {
            ModelState.AddModelError("", e.Message);
            return View();
        }
        return RedirectToAction("Index");
    }

如果文件是mp4,可以使用file. savea (path)下载。但如果文件是在其他格式,它转换为mp4成功使用NReco。无法下载,因为它是由System.IO.File.Create(tempFileName)创建的。只是我可以通过ftp下载。
文件访问权限有问题吗?如果是,我应该如何设置文件访问权限?

System.IO.File.Create file无法下载?在MVC 5中

实际问题与属于服务器的文件权限策略有关。如果文件是由内部进程制作的,如FFMpeg DLL (c++库),服务器会阻止IIS用户下载该文件。所以我联系了服务器团队,他们给了IIS用户下载FFMpeg DLL文件的权限。