C# 使用Fine Uploader将文件分块上传,我无法将它们重新合并在一起

C# 使用Fine Uploader将文件分块上传,我无法将它们重新合并在一起,c#,asp.net,fine-uploader,C#,Asp.net,Fine Uploader,我正在尝试使用Fine Uploader,以便在我们的网站上实现它。 我真的很喜欢分块和恢复功能,但在服务器端将文件重新组合在一起时遇到了一些问题;我这么做之后,他们就腐败了。 经过一些调查,我发现每个块都太大了194字节,这使得生成的文件太大了x194字节。 这是一个已知的问题吗?如果需要,我会发布我的代码。 谢谢你抽出时间 编辑这里是我的sscce。我忘了指定我正在使用ASP.NET C# 网页上传程序的初始化 以及服务器端处理程序(c#): 使用制度; 使用System.Web; 公共类

我正在尝试使用Fine Uploader,以便在我们的网站上实现它。 我真的很喜欢分块和恢复功能,但在服务器端将文件重新组合在一起时遇到了一些问题;我这么做之后,他们就腐败了。 经过一些调查,我发现每个块都太大了194字节,这使得生成的文件太大了x194字节。 这是一个已知的问题吗?如果需要,我会发布我的代码。 谢谢你抽出时间

编辑这里是我的sscce。我忘了指定我正在使用ASP.NET C#

网页上传程序的初始化

以及服务器端处理程序(c#):


使用制度;
使用System.Web;
公共类UploadHandler:IHttpHandler,System.Web.SessionState.IReadOnlySessionState
{
私人住宅已落成;;
公共void ProcessRequest(HttpContext上下文)
{
HttpRequest请求=context.request;
字符串partIndex=request.Params[“qqpartindex”];
int totalParts=Convert.ToInt32(request.Params[“qqtotalparts”]);
字符串文件名=request.Params[“qqfilename”];
字符串totalFileSizeName=request.Params[“qqtotalfilesize”];
字符串uploadedTemp=context.Server.MapPath(“~/App\u Data/”+“TEMP/”);
字符串uploadedLocation=context.Server.MapPath(“~/App\u Data/”);
字符串filePath=System.IO.Path.Combine(uploadedTemp,partIndex+“.tmp”);
如果(!System.IO.File.Exists(filePath))
{
System.IO.Stream inputStream=request.inputStream;
使用(System.IO.FileStream FileStream=System.IO.File.OpenWrite(filePath))
{
CopyTo(fileStream);
}
}
完成=0;
if(partIndex.Equals(Convert.ToString(totalParts-1))//所有块都已到达
{
合并临时文件(uploadedTemp、uploadedLocation、文件名);
完成=1;
}       
context.Response.ContentType=“应用程序/json”;
Write(“{\“success\”:true,“completed\”:“+completed+”}”);
}
公共布尔可重用
{
获取{return true;}
}
public void mergeTempFiles(字符串pathrigin、字符串pathToSave、字符串filename)
{
字符串[]tmpfiles=System.IO.Directory.GetFiles(pathrigin,“*.tmp”);
如果(!System.IO.Directory.Exists(pathToSave))
{
System.IO.Directory.CreateDirectory(pathToSave);
}
System.IO.FileStream outPutFile=new System.IO.FileStream(路径保存+文件名,System.IO.FileMode.Create,System.IO.FileAccess.Write);
foreach(tmpfiles中的字符串tempFile)
{   
int字节读取=0;
字节[]缓冲区=新字节[1024];
System.IO.FileStream inputTempFile=new System.IO.FileStream(tempFile,System.IO.FileMode.OpenOrCreate,System.IO.FileAccess.Read);
而((bytesRead=inputTempFile.Read(缓冲区,0,1024))>0)
Write(缓冲区,0,字节读取);
inputTempFile.Close();
//System.IO.File.Delete(tempFile);
}
outPutFile.Close();
}    
}

问题出在我解析inputstream(在我的c#handler类中)的方式上,该inputstream是来自请求对象的各个块

我读它的方式:

System.IO.Stream inputStream = request.InputStream;
应该这样理解:

System.IO.Stream inputStream = request.Files[0].InputStream;

建议只在IE中使用第二种方式,在所有其他浏览器中使用第一种方式,但我发现在所有浏览器中都是这样。

如果需要,我会发布我的代码是,请做我添加的。我还注意到,块并不总是194字节太大,这个数字是可变的,但它们总是有点太大,导致文件比原始文件大几千字节,因此损坏。你确定你正在按正确的顺序组装部件吗?不这样做肯定会导致文件损坏。浏览一下代码,您似乎没有注意合并方法中这些部分的顺序。使用我已经验证过的断点调试,它们是按正确的顺序处理的。为了绝对肯定,我在数组中添加了一个排序,结果是一样的。我觉得很奇怪,生成的文件比原来的…@Dyte文件大,但现在没有。我们现在根本没有足够的员工来处理这类事情。然而,我们正在雇用更多的开发人员来协助Fine Uploader。一旦我们配备了更多的员工,我们将以多种语言提供更具体的服务器端支持。在此之前,请参考和/或在Stackoverflow的相应标签下发布您选择的服务器端语言的问题。我尝试了这两种方法,但上传后无法打开文件。有什么建议吗。我正在使用这个文件上传器
System.IO.Stream inputStream = request.InputStream;
System.IO.Stream inputStream = request.Files[0].InputStream;