2013-06-11 2 views
0

Мне нужно собрать файл excel в моей папке проекта asp.net mvc и закодировать его в строке base64.asp.net mvc convert (encode) excel file to base64 string

шахты код прямо сейчас:

string base64 = String.Empty; 
var pathName = Server.MapPath("~/App_Data/ImportTemplate.xlsx");` 
byte[] docBytes = null; 

using (StreamReader strm = new StreamReader(pathName, System.Text.Encoding.UTF8)) 
     { 
      Stream s = strm.BaseStream; 
      BinaryReader r = new BinaryReader(s); 
      docBytes = r.ReadBytes(Convert.ToInt32(r.BaseStream.Length)); 
      base64 = Convert.ToBase64String(docBytes); 
      r.Close(); 
      s.Close(); 
      strm.Close(); 
     } 

до сих пор это не работает должным образом. Какие-либо предложения?

+0

, что именно не так с ним? Вызывает ли это исключение? – Maciej

+0

мой webservice отклоняет/отклоняет его, затем я снова конвертирую эту строку base64 в байт [] и перехожу к методу. – mat1c

+0

можете ли вы разместить подробные сведения об ошибке? Что вы подразумеваете под «мой webservice отклоняет/отклоняет его» – Maciej

ответ

0

Скорее всего, проблема в том, что ваши данные base64 содержат символы «+» и «/», которые специально интерпретируются HTTP. Вам нужно преобразовать этот двоичный код в то, что они называют кодировкой URL-адреса base64, которая использует символы «-» и «_» для этих символов. Примеры в http://api.adform.com/Services/Documentation/Samples/MediaPlanServiceSamples.htm#ImportMediaPlan показывают, что это так.

См. https://stackoverflow.com/a/17032614/56778 для получения информации о том, как сделать преобразование.

0

Может у попробовать:

byte[] docBytes = ReadFile(pathName); 


byte[] ReadFile(string sourcePath) 
    { 
     byte[] data = null; 
     FileInfo fileInfo = new FileInfo(sourcePath); 
     long numBytes = fileInfo .Length; 
     FileStream fileStream = new FileStream(sourcePath, FileMode.Open, FileAccess.Read); 
     BinaryReader br = new BinaryReader(fileStream); 
     data = br.ReadBytes((int)numBytes); 
     fileStream .Close(); 
     return data; 
    }