2015-03-08 2 views
1

Я пытался разобраться с этим в течение нескольких недель без везения. Я уверен, что мне не хватает базовых знаний в области управления памятью в .NET. Я не уверен, с чего начать googling.Vimeo загрузка через потоковое видео. Как загрузить видео на более мелкие части (куски), чтобы сохранить память?

Это API я слежу: https://developer.vimeo.com/api/upload#start-streaming

Если пользователь загружает видео, которое находится под 100mb он работает окей, но она принимает навсегда, чтобы загрузить. Однако, если файл превышает 100 МБ, время соединения заканчивается, потому что серверу не хватает памяти. Думаю, мне нужно загрузить файл в более мелкие части.

Это мой текущий uploadmethod:

public static string UploadVideo(HttpPostedFileBase file, dynamic ticket) 
     { 
      try 
      { 
       var apiUrl = ticket.upload_link_secure; 
       byte[] fileData; 
       using (var binaryReader = new BinaryReader(file.InputStream)) 
       { 
        fileData = binaryReader.ReadBytes(file.ContentLength); 
       } 



       using (var client = new WebClient()) 
       { 
        client.Headers.Add(HttpRequestHeader.Authorization, "bearer " + AccessToken); 
        client.Headers.Add("Accept", "application/vnd.vimeo.*+json;version=3.0"); 
        client.UploadData(apiUrl, "PUT", fileData.ToArray()); 
       } 



      } 

      catch (Exception ex) 
      { 
       EventLog.LogEvent("Error uploading video: ", ex.Message, ex.ToString(), 
        EventTypes.Error, false, ""); 
      } 
      return "Failed"; 



     } 

Сейчас я загружаю все это в один массив байт, который, вероятно, является плохой практикой. Я могу взять весь контент и разделить его на части, скажем, 3mb, а затем загрузить его? Разве это не заставило бы меня называть verifyUpload много раз просто для загрузки одного видео? Скажем,

+0

Я действительно не понимаю ваш случай использования, но очевидным недостатком с вашим примером является то, что вы преобразовываете поток в массив байтов, который будет потреблять память на вашем сервере. Вам необходимо полностью передать данные, не преобразовывая их в байты, используя 'Stream.CopyTo'. Я не могу понять, почему вы сначала отправляете файл на сайт .NET, а затем повторно отправляете его на другой сервер - кажется лишним и ненужным. – NightOwl888

+0

Каким будет решение? Использование javascript для его загрузки? Не vimeodotnet также опубликовать файл в .net сначала, а затем загрузить его в vimeo? – sindrem

+0

Но, мне нужно сохранить файл на диск, прежде чем загружать его в vimeo? – sindrem

ответ

0

Вы пытались просто отправить его прямо из потока?

Не уверен, что это помогает, но, по крайней мере, стоит попробовать.

public static string UploadVideo(HttpPostedFileBase file, dynamic ticket) 
    { 
     try 
     { 
      var apiUrl = ticket.upload_link_secure; 

      using (var client = new WebClient()) 
      { 
       client.Headers.Add(HttpRequestHeader.Authorization, "bearer " + AccessToken); 
       client.Headers.Add("Accept", "application/vnd.vimeo.*+json;version=3.0"); 
       using (var binaryReader = new BinaryReader(file.InputStream)) 
       { 
        client.UploadData(apiUrl, "PUT", binaryReader.ReadBytes(file.ContentLength)); 

        //SAVE FILE TO DISK 
        //http://stackoverflow.com/questions/3914445/how-to-write-contents-of-one-file-to-another-file 
        using (FileStream writeStream = File.OpenWrite("D:\\file2.txt")) 
        { 
        BinaryWriter writer = new BinaryWriter(writeStream); 

        // create a buffer to hold the bytes 
        byte[] buffer = new Byte[1024]; 
        int bytesRead; 

        // while the read method returns bytes 
        // keep writing them to the output stream 
        while ((bytesRead = 
          binaryReader.Read(buffer, 0, 1024)) > 0) 
        { 
         writeStream.Write(buffer, 0, bytesRead); 
        } 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      EventLog.LogEvent("Error uploading video: ", ex.Message, ex.ToString(), 
       EventTypes.Error, false, ""); 
     } 
     return "Failed"; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^