6

私はチャンクに分割し、すべてのチャンクが受信されたときにサーバーに参加するajax JavaScriptを使用して、クライアント側からファイルをアップロードしています。しかし、問題は、元のファイルとアップロードされたファイルが同じサイズであっても、両方が異なることです。ビデオファイルとは異なり、同じものを表示するときの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();
}
4

1 に答える 1