【问题标题】:To append a byte[] to a string in c#在 C# 中将 byte[] 附加到字符串
【发布时间】:2015-11-29 13:24:29
【问题描述】:

我的 javascript 代码将数据块发送到 C# 中的处理程序。我的 Javascript 代码工作正常,我已经尝试从客户端(javascript)接收数据并将它们传递给 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;
    }
}

【问题讨论】:

  • 根据编码的不同,字节数组的长度和字符串的长度可能会有所不同。
  • 最好将其转换为 base64 表示。您可以使用 Convert.ToBase64String - msdn.microsoft.com/en-us/library/… 和 Convert.FromBase64String - msdn.microsoft.com/en-us/library/…。在 javascript 中,这将是 btoa() 和 atob()。
  • 文件里有什么?是文本还是二进制数据。如果您要将它累积在服务器端的字符串中,这意味着它是文本。如果它是文本,那么为什么不将它作为 JavaScript 端的文本使用呢?此外,如果您要在多个请求中发送数据,您需要将它们累积在服务器端的某个东西中,这些东西将在多个请求中持续存在。您可以为此使用 Session 之类的东西。

标签: javascript c# append handle


【解决方案1】:

StringBuilder.Append 没有采用字节数组的重载,因此它将调用StringBuilder.Append(object) 方法。这将在字节数组上调用ToString 以获取字符串值,从而生成字符串"System.Byte[]"

要将字节数组作为字符串获取,您需要知道字节代表什么。例如,如果字节是编码为 UTF-8 的文本,那么您可以使用 Encoding.UTF8 类对其进行解码:

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

请注意,像 UTF-8 这样的多字节编码可能会将一个字符表示为多个字节,因此字符串长度可能与字节数组长度不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2012-11-09
    • 2021-10-25
    • 1970-01-01
    • 2022-01-21
    • 2019-02-13
    相关资源
    最近更新 更多