2013-08-09 30 views
5

Przesyłam plik od strony klienta przy użyciu ajax javascript, który dzielę w porcjach i na serwerze, gdy wszystkie porcje są otrzymywane i dołączam do nich. Problem polega jednak na tym, że chociaż oryginalny plik i przesłany plik są tego samego rozmiaru, ale oba są różne. Znaczy GIF kiedy zobaczyć jej różne i to samo z files.client wideo kodu po stronienie można podzielić pliku i wysłać, a następnie dołączyć do serwera

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); 

kod po stronie serwera, aby dołączyć

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); 
    } 

zapisać podzielić plik serwer

// 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(); 
} 
+0

Czy to jest MVC? WebAPI? WebForms? – Fals

+0

to jest mvc ... cały kod serwera jest w kontrolerze, który jest wywoływany przez ajax – manishkr1608

+0

możliwy duplikat [Jak zrobić post formularza Ajax ASP.NET MVC z wieloczęściowego/formularza danych?] (Http://stackoverflow.com/questions/581703/how-to-do-a-asp-net-mvc-ajax-form-post-with-multipart-form-data) – Fals

Odpowiedz

0

Blob ma pewne zachowania zależne od wersji przeglądarki, jak udokumentowano w Mozilla Developer Network: Blob. Jest to również sposób implementacji w IE slice method.

Oznacza to, że w nowszych przeglądarek pokroić drugim parametrem jest nie długość, jest to pozycja koniec.

Spójrz na to pytanie html5 chunk and webworker does not upload anything, które powinno okazać się pomocne.

+0

nie to nie zadziałało – manishkr1608

+0

To nie jest jeszcze rozwiązane ... chłopaki proszę pomóżcie – manishkr1608

+1

rozwiązałeś problem ... problem polegał na tym, że nie dołączałem do plików w kolejności tak zmieniono kod linii foreach (FileInfo fiPart in diSource.GetFiles (@ " * .part "). OrderBy (f => f.Czas utworzenia)) – manishkr1608

Powiązane problemy