2015-03-30 5 views
0

Я использую следующий фрагмент кода C# для загрузки, конвертирования и загрузки файла .pptx через API представления Box.Как указать параметры в заголовке API-окна?

 var boxViewID = ""; 
     string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); 
     byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 

     String url_ = @"https://upload.view-api.box.com/1/documents"; 
     HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url_); 
     wr.ContentType = "multipart/form-data; boundary=" + boundary; 
     wr.Headers.Add("Authorization:Token " + "MY_CODE"/*Configuration.BoxViewAPIKey*/); 
     wr.Method = "POST"; 
     wr.KeepAlive = true; 
     wr.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     wr.Timeout = 1000000;    
     wr.SendChunked = true; 
     DateTime start = DateTime.Now; 
     Exception exc = null; 
     Stream rs = wr.GetRequestStream(); 
     try 
     { 
      rs.Write(boundarybytes, 0, boundarybytes.Length); 

      string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; non_svg=\"true\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; 
      string header = string.Format(headerTemplate,"file", file, contentType); 
      Console.WriteLine(header); 
      byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); 
      rs.Write(headerbytes, 0, headerbytes.Length); 
      FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); 
      byte[] buffer = new byte[40960]; 
      int bytesRead = 0; 

      int totalSent = 0; 
      int totalLength = (int)fileStream.Length; 

      while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
      { 
       totalSent += bytesRead; 
       var percent = new decimal(100.0 * totalSent/totalLength); 
       if (progress != null) 
       { 
        progress("Box processing", percent); 
       } 
       rs.Write(buffer, 0, bytesRead); 
      } 
      fileStream.Close(); 
     } 
     catch(Exception ex) 
     { 
      exc = ex; 
     } 
     DateTime end = DateTime.Now; 
     int seconds = (int)(end - start).TotalSeconds; 
     if(seconds>=0) 
     { 
      if(exc!=null) 
      { 
       throw exc; 
      } 
     } 
     byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); 
     rs.Write(trailer, 0, trailer.Length); 
     rs.Close(); 

     WebResponse wresp = null; 
     try 
     { 
      wresp = wr.GetResponse(); 
      Stream stream2 = wresp.GetResponseStream(); 
      StreamReader reader2 = new StreamReader(stream2); 
      var res = reader2.ReadToEnd(); 
      var docRes = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(res); 
      if (docRes["id"] != null) 
       boxViewID = docRes["id"]; 
     } 
     catch (Exception ex) 
     { 
      if (wresp != null) 
      { 
       wresp.Close(); 
       wresp = null; 
      } 
     } 
     finally 
     { 
      wr = null; 
     } 
     return boxViewID; 

Указание параметра "non_svg" должен создать .png изображения для каждого слайда в презентации (вместо .SVG + .html пар). Однако API, похоже, игнорирует эту часть запроса, и я всегда получаю svg-файлы. Любая идея о том, что я делаю неправильно? Благодаря!

ответ

0

Опция non_svg вызывает создание представлений PNG для каждой страницы, но представление SVG по-прежнему генерируется. Зритель загружает только PNG-файлы, если SVG не поддерживается в браузере (в основном, только IE 8). Попробуйте изменить страницу-1.svg на страницу-1.png в браузере (например, https://view-api.box.com/1/sessions/465c5d45caf04752a6113b0e5df593a5/assets/page-1.png против https://view-api.box.com/1/sessions/465c5d45caf04752a6113b0e5df593a5/assets/page-1.svg). Все активы будут существовать в content.zip, если вы используете документы content конечной точки.

+0

Благодарим вас за ответ. В основном это означает, что я не могу получить только набор изображений .png внутри файла content.zip? Это преобразование .svg в .png выполняется внутри средства просмотра Box? –

+0

Вы получаете файлы .png и .svg, если вы укажете 'non_svg'. Вы всегда получаете файлы .svg независимо. – lakenen

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