问题描述
$("#folders").kendoUpload({
async: {
saveUrl: baseAddrs + "/" + "DragAndDrop/ChunkSave",removeUrl: baseAddrs + "/" + "DragAndDrop/remove",chunkSize: 31457280,// ~30 MB
autoUpload: true,concurrent: true
},upload: onUpload,directory: true,directoryDrop: true,complete: onComplete,success: onFileSuccess,error: onError
});
我正在使用 AppendtoFile 逻辑,以防文件大于 30 MB,它将拆分和上传。 示例-> 如果上传 50 MB 的文件,它将分成 2 个块,前 30 MB 的数据将写入文件,并在下一次迭代中写入 20 MB。我首先将此文件写入临时位置,第一次运行的文件大小将为 30 MB,对于最后一个块,它会将接下来的 20 MB 附加到文件中,现在该文件将变为 50 MB。现在,当我尝试从临时位置打开此文件时,它说文件已损坏或没有有效的扩展名。扩展名有效,我已验证。 .xls,.docx,.pptx,.jpg 这个文件给出了同样的错误信息,但 .pdf 就像一个魅力,没有任何问题。即使文件大小低于 30 MB,以上扩展名也不起作用,只有 .pdf 有效。我错过了什么?
public string AppendChunkData(string filePath,ChunkMetaData MetaData)
{
var uniqueUploadId = MetaData.UploadUid;
string BaseFileName = Path.GetFileName(filePath);
string path = Server.MapPath(UploadTemp + "/ChunkUpload");
string newpath = Path.Combine(path,uniqueUploadId + BaseFileName);
byte[] byteArray = StreamToByteArray(Request.InputStream);
using (var stream = new FileStream(newpath,FileMode.Append))
{
stream.Write(byteArray,byteArray.Length);
}
return newpath;
}
private byte[] StreamToByteArray(Stream srcFile)
{
srcFile.Position = 0;//faster than seek when dealing with an absolute position.
byte[] buffer = new byte[srcFile.Length];
srcFile.Read(buffer,buffer.Length);
return buffer;
}
解决方法
我找到了问题所在,问题出在 Request.InputStream 上。我没有通过正确的流。在我通过正确的流之后。它适用于各种文件。