2015-10-13 1 views
-1

Le fichier créé par System.IO.File.Create ne peut pas être téléchargé comme le fichier créé par HttpPostedFileBase.SaveAs.Impossible de télécharger le fichier System.IO.File.Create? dans mvc 5 asp.net

Mon code:

[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"); 
    } 

si le fichier est mp4 peut être téléchargé à l'aide file.SaveAs (chemin). Mais si le fichier est dans un autre format, il convertit en mp4 avec succès en utilisant NReco.VideoConverter et ne peut pas télécharger parce qu'il crée par System.IO.File.Create (tempFileName). Juste je peux télécharger en utilisant ftp.
Le problème est-il lié à l'autorisation d'accès au fichier? Si c'est ce que je devrais faire dans l'autorisation d'accès au fichier?

+0

Que sont 'tempFileName' et' filess'? –

+2

Eh bien, que se passe-t-il en ce moment? Y a-t-il une exception? Pourquoi n'utilisez-vous pas 'fileStream'? –

+0

J'ai déjà utilisé FileStream mais je ne peux pas travailler. et quand j'essaie de le télécharger, il n'y a pas de fichier. En fait, le fichier dans le service et je peux télécharger par ftp. –

Répondre

0

En fait, le problème est lié à la politique d'autorisations de fichiers appartenant au serveur. Si le fichier est fait par un processus interne comme FFMpeg DLL (bibliothèque C++), le serveur bloque l'utilisateur IIS de télécharger le fichier. Je contact avec l'équipe du serveur et ils donnent des autorisations à l'utilisateur IIS pour télécharger le fichier qui a été créé par FFMpeg DLL.