【问题标题】:System.IO.File.Create file cannot download ? in mvc 5 asp.netSystem.IO.File.Create 文件无法下载?在 mvc 5 asp.net 中
【发布时间】:2015-10-13 15:18:06
【问题描述】:

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.SaveAs(path) 下载。但是如果文件是其他格式,它会使用 NReco.VideoConverter 成功转换为 mp4 并且无法下载,因为它是由 System.IO.File.Create(tempFileName) 创建的。只是我可以使用 ftp 下载。
是文件访问权限的问题吗? 如果是文件访问权限怎么办?

【问题讨论】:

  • tempFileNamefiless 是什么?
  • 那么现在发生了什么?有例外吗?你为什么不使用fileStream
  • 我已经使用过 FileStream 但无法使用。当我尝试下载它时显示没有文件。实际上服务器中的文件,我可以通过 ftp 下载。
  • 您还没有向我们展示将该文件结果流式传输给用户的 mvc 操作。你能把那个代码贴出来吗?
  • 实际抛出的异常是什么?为无效路径错误添加权限毫无意义。异常消息会有所帮助,但完整的异常文本会更好,因为它包括调用堆栈和任何内部异常(即调用 e.ToString())

标签: c# asp.net asp.net-mvc-5 file-access system.io.file


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2015-02-18
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多