2015-10-13 79 views
-1

System.IO.File.Create創建的文件不能像HttpPostedFileBase.SaveAs創建的文件那樣下載。System.IO.File.Create文件無法下載?在mvc 5 asp.net

我的代碼:

[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(路徑)。但是,如果文件是其他格式,它使用NReco.VideoConverter成功轉換爲mp4,無法下載,因爲它是由System.IO.File.Create(tempFileName)創建的。只要我可以使用ftp下載。
文件訪問權限是否存在問題? 如果在文件訪問權限中該怎麼辦?

+0

什麼是'tempFileName'和'filess'? –

+2

那麼現在會發生什麼?是否有例外?你爲什麼不使用'fileStream'? –

+0

我已經使用FileStream但無法工作。 當我嘗試下載它時顯示沒有文件。 其實在服務器和我的文件可以通過FTP下載。 –

回答

0

實際上,問題與屬於服務器的文件權限策略有關。 如果文件是由像FFMpeg DLL(C++庫)這樣的內部進程創建的,服務器會阻止IIS用戶下載文件。 所以我聯繫服務器團隊,他們給IIS用戶下載由FFMpeg DLL生成的文件的權限。