2015-09-03 5 views
0

Мой код javascript отправляет BLOB-данные для обработчика в C#. Мой Javascript-код работает нормально, и я уже пытался получить данные от клиента (javascript) и передать их обработчику C# и сохранить их в локальной папке.Чтобы добавить байт [] в строку в C#

Вместо сохранения данных в папке, я хочу сохранить его в string.
Мой обработчик каждый раз получает часть моей информации как byte[].

мой Javascript:

xhr = new XMLHttpRequest(); 
// this is not the complete code 
// I slice my file and push them in var blobs = []; 
blobs.push(file.slice(start, end)); 
while (blob = blobs.shift()) { 

    xhr.send(blob); 
    count++; 
} 

Мой C# Обработчик: В данном случае bool ok никогда не будет установлен в true. Как я могу получить все мои файлы куском, когда я отправляю их из javascript; и вместо сохранения в папке, сохраняя его в строке?

public void ProcessRequest(HttpContext context) 
{ 
    try 
    { 
     byte[] buffer = new byte[context.Request.ContentLength]; 
     context.Request.InputStream.Read(buffer, 0, context.Request.ContentLength); 
     string fileSize = context.Request.Headers.Get("X_FILE_SIZE"); 

     bool ok = false; 
     System.Text.StringBuilder myData = new System.Text.StringBuilder(); 
     myData.Append(buffer); 
     if(myData.Length == int.Parse(fileSize)){ ok=true; } 

    } 
    catch (Exception) 
    { 

     throw; 
    } 
} 
+3

Входит в кодировку.Getstring: https://msdn.microsoft.com/en-us/library/744y86tc%28v=vs.110%29.aspx – Flynn1179

+2

В зависимости от кодировки длина массива байтов и длина строки может быть разной. –

+0

Возможно, было бы лучше преобразовать его в представление base64. Вы можете использовать Convert.ToBase64String - https://msdn.microsoft.com/en-us/library/system.convert.tobase64string(v=vs.110).aspx и Convert.FromBase64String - https://msdn.microsoft. ком/EN-US/библиотека/system.convert.frombase64string (v = vs.110) .aspx. В javascript это будут btoa() и atob(). – Igor

ответ

0

Там нет перегрузки StringBuilder.Append, который принимает массив байтов, поэтому он будет вызывать метод StringBuilder.Append(object). Это вызовет ToString в массиве байтов, чтобы получить строковое значение, которое приводит к строке "System.Byte[]".

Чтобы получить массив байтов в виде строки, вам нужно знать, что представляют собой байты. Например, если байты текст, который кодируется как UTF-8, то вы можете использовать Encoding.UTF8 класс декодировать его:

myData.Append(Encoding.UTF8.GetString(buffer)); 

Обратите внимание, что многобайтовые кодировки, как UTF-8 может представлять собой один символ в виде нескольких байт , поэтому длина строки может отличаться от длины массива байтов.

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