【发布时间】: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;
}
}
【问题讨论】:
-
查看 Encoding.Getstring:msdn.microsoft.com/en-us/library/744y86tc%28v=vs.110%29.aspx
-
根据编码的不同,字节数组的长度和字符串的长度可能会有所不同。
-
最好将其转换为 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