c# - 无法拆分文件并发送然后加入服务器

标签 c# javascript ajax asp.net-mvc html

我正在使用 ajax javascript 从客户端上传文件,我将其分成 block ,并在收到所有 block 后在服务器中加入它们。但问题是,即使原始文件和上传的文件大小相同,但两者不同。我的意思是 gif 文件,当我查看它与视频文件的不同和相同时。客户端代码

    var xhr = new XMLHttpRequest();

    var tempBlob = blob;
    var blobOrFile = tempBlob.slice(fileDataStart, fileDataSent);
    xhr.open('POST', '/Portfolio/UploadBinaryFiles', false);

    xhr.setRequestHeader("Cache-Control", "no-cache");
    xhr.setRequestHeader("X-File-Name", fileName);
    xhr.setRequestHeader("X-File-Size", fileSize);
    xhr.setRequestHeader("X-File-BytesSent", fileDataSent);
    xhr.setRequestHeader("X-File-SplitCounter", fileSplitCounter);
    xhr.setRequestHeader("Content-Type", "multipart/form-data");

    xhr.send(blobOrFile);

要加入的服务器端代码

    FileStream fsSource = new FileStream(FileOutputPath, FileMode.Append);

    // Loop through all the files with the *.part extension in the folder
    foreach (FileInfo fiPart in diSource.GetFiles(@"*.part"))
    {
        // Create a byte array of the content of the current file
        Byte[] bytePart = System.IO.File.ReadAllBytes(fiPart.FullName);
        // Write the bytes to the reconstructed file
        fsSource.Write(bytePart, 0, bytePart.Length);
    }

在服务器中保存分割文件

// Read input stream from request
byte[] buffer = new byte[Request.InputStream.Length];
int offset = 0;
int cnt = 0;
while ((cnt = Request.InputStream.Read(buffer, offset, 10)) > 0)
{
    offset += cnt;
}
// Save file
using (FileStream fs = new FileStream(fullNameNoExt, FileMode.Create))
{
    fs.Write(buffer, 0, buffer.Length);
    fs.Flush();
}

最佳答案

Blob 有一些依赖于浏览器版本的行为,如 Mozilla Developer Network: Blob 中所述.此外,这就是它在 IE 中的实现方式 slice method .

这意味着在较新的浏览器中,slice 的第二个参数不是长度,而是结束位置

看看这个问题html5 chunk and webworker does not upload anything ,这应该会有所帮助。

关于c# - 无法拆分文件并发送然后加入服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18145334/

相关文章:

c# - 带有 openxml 的 Excel 文件,单个工作簿中有多个工作表

javascript - Asp.net mvc 在 javascript 中设置 session 变量

javascript - 将 vue-i18n 消息作为对象访问

javascript - 根据用户输入发送参数

javascript - Ajax 链接作为列表项

jquery - 如何使用 JQuery 在 AJAX 回调中查找元素?

c# - 在 resharper intellisense 中显示枚举整数值

c# - 我可以动态添加文件到部署项目吗?

javascript - 检查一个数的可整性的基本练习

javascript - 为什么内容脚本中未定义 chrome.runtime?