2013-09-13 8 views
0

Я пытаюсь получить длительность строки фрагмента видеоконтента, загруженного в приложение MVC4, с помощью MediaInfo.dll который я добавил в приложение в качестве ссылки.MediaInfo не может получить информацию о загруженном файле таким же образом, как это указано в локальном файле

Я успешно в состоянии просмотреть информацию о файле при вводе расположения моего файла локально, используя следующий код:

MediaFile uploadedFile = new MediaFile("C:\\Users\\jp\\Desktop\\Quarry.mp4"); 
string duration = uploadedFile.General.DurationString.ToString(); 

Однако, когда я пытаюсь использовать это на загруженный файл я не получаю верну информацию, которую я ожидал. Мой контроллер выглядит следующим образом:

[HttpPost, ValidateInput(true)] 
    public ActionResult NewContent(HttpPostedFileBase postedFile, string username, FormCollection form) 
    { 
     if (postedFile != null) 
     { 
      HttpPostedFileBase postedFileCopy = postedFile; 
      postedFileCopy.InputStream.Position = 0; 
      Stream stream = postedFile.InputStream; 

      MediaFile uploadedFile = new MediaFile(Server.MapPath(postedFile.FileName)); 
      string duration = uploadedFile2.General.DurationString.ToString(); 

      string[] name = form.GetValues("name"); 
      string[] author = form.GetValues("author"); 
      string[] description = form.GetValues("description"); 

      TimeSpan videoDuration = TimeSpan.Parse(duration); 


      try 
      { 
       avm.AddContent(postedFile, stream, Convert.ToString(name[0]), Convert.ToString(author[0]), Convert.ToString(description[0]), videoDuration); 
       return RedirectToAction("Contents", "Admin"); 
      } 
      catch (Exception ex) 
      { 
       System.Diagnostics.EventLog.WriteEntry("Application", ex.Message, System.Diagnostics.EventLogEntryType.Error); 
       return RedirectToAction("Unsuccessful", "Admin"); 
      } 
     } 
     else 
      return RedirectToAction("NewCourse", "Admin"); 

    } 

Я пробовал:

MediaFile uploadedFile = new MediaFile(Server.MapPath(postedFile.FileName)); 
MediaFile uploadedFile = new MediaFile(postedFile.FileName); 
MediaFile uploadedFile = new MediaFile(postedFile.toString()); 
MediaFile uploadedFile = new MediaFile(System.IO.Path.GetFullPath(postedFile.FileName); 

Любые идеи о том, как я могу получить MediaInfo признать postedFile таким же образом, он умеет читать локальный файл , Или как я могу получить путь к расположению файла клиентской машины.

+0

Редактировать вопрос со вчерашнего дня, чтобы лучше объяснить проблему – Jay

ответ

0

Существует способ проанализировать файл, используя поток вместо файла.

Посмотрите на эти методы:

Open_Buffer_Init(..) 
Open_Buffer_Continue(..) 
Open_Buffer_Continue_GoTo_Get(..) 
Open_Buffer_Init(..) 

Это мне потребовалось некоторое время, чтобы выяснить, как получить IntPtr для буфера .. не забудьте использовать GCHandle и AddrOfPinnedObject

Мой образец во всем Если вам нужна дополнительная помощь, я попытаюсь снова запустить мой код.