locked
File is getting corrupt when uploaded to server using JavaScript for windows 8 surface !!

    Question

  • The file is uploaded to the server but is unable to open the corresponding file .

    Only ".txt" format files are correctly uploaded  when I use the API "readTextAsync" and can be read also !

    But when I am using "readBufferAsync(file)", the response from the server comes null, as it says no data found in the body of the request.

    Here is my code :

                                                                                                                   

     var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
        openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
        openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.desktop;
        openPicker.fileTypeFilter.replaceAll(["*"]);

        openPicker.pickSingleFileAsync().then(function (file) {
            if (file) {

               Windows.Storage.FileIO.readBufferAsync(file).then(function (buffer) {

                            var boundary = "AJAX-----------------------" + (new Date).getTime();

                            var xhr = new XMLHttpRequest;

                            xhr.open("POST", fileServer, true);

                            var contentType = "multipart/form-data; boundary=" + boundary;
                            xhr.setRequestHeader("Content-Type", contentType);
                            
                            var data = buildMessage(boundary);
                            xhr.send(data);

                            function buildMessage(boundary) {
                                var CRLF = "\r\n";
                                var parts = [];
                                var part = "";

                                part += 'Content-Dis-data; ';
                                part += 'name="' + appId + '?' + timeStamp + '"; ';
                                part += 'filename="' + uploadFileName + '"' + CRLF;
                                part += "Content-Type: application/octet-stream";
                                part += CRLF + CRLF; // marks end of the headers part

                                part += fileContent + CRLF;
                              
                                parts.push(part);

                               request = "--" + boundary + CRLF;
                               request += parts.join("--" + boundary + CRLF);
                               request += "--" + boundary + "--" + CRLF;
                               return request;

                                var buf1 = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(part, Windows.Security.Cryptography.BinaryStringEncoding['']);
                                var buf2 = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(CRLF, Windows.Security.Cryptography.BinaryStringEncoding['']);
                                part = buf1.length + buffer.length + buf2.length;

                                parts.push(part);                          

                                request = "--" + boundary + CRLF;
                                var req1 = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(request, Windows.Security.Cryptography.BinaryStringEncoding['']);

                                var byteArrayFile = Windows.Security.Cryptography.CryptographicBuffer.copyToByteArray(buffer);
                                var byteArray1 = Windows.Security.Cryptography.CryptographicBuffer.copyToByteArray(buf1);
                                var byteArray2 = Windows.Security.Cryptography.CryptographicBuffer.copyToByteArray(buf2);

                                var byteArray3 = Windows.Security.Cryptography.CryptographicBuffer.copyToByteArray(req1);

                                var finalData = [];
                                for (i = 0; i < byteArray3.length; i++) {
                                    finalData.push(byteArray3[i]);
                                }
                                for (j = 0; j < byteArray1.length; j++) {
                                    finalData.push(byteArray1[j]);
                                }
                                for (k = 0; k < byteArrayFile.length; k++) {
                                    finalData.push(byteArrayFile[k]);
                                }
                                for (l = 0; l < byteArray2.length; l++) {
                                    finalData.push(byteArray2[l]);
                                }
                                for (m = 0; m < byteArray3.length; m++) {
                                    finalData.push(byteArray3[m]);
                                }

                                return finalData;

                });

    Wednesday, October 23, 2013 6:43 AM

Answers