diff --git a/client/js/s3/s3.xhr.upload.handler.js b/client/js/s3/s3.xhr.upload.handler.js index 41299ac1d..d70b5abb6 100755 --- a/client/js/s3/s3.xhr.upload.handler.js +++ b/client/js/s3/s3.xhr.upload.handler.js @@ -124,8 +124,8 @@ qq.s3.XhrUploadHandler = function(spec, proxy) { xhr.setRequestHeader(name, val); }); - // Workaround for IE Edge - if (!hasContentType) { + // Set this only for edge 15 or higher + if (qq.edge15() && !hasContentType) { xhr.setRequestHeader("Content-Type", ""); } diff --git a/client/js/util.js b/client/js/util.js index 3ac744943..da625ea17 100644 --- a/client/js/util.js +++ b/client/js/util.js @@ -542,6 +542,18 @@ var qq = function(element) { return navigator.userAgent.indexOf("Edge") >= 0; }; + qq.edge15 = function() { + var ua = navigator.userAgent; + var edge = ua.indexOf("Edge/"); + var edgeVersion = 0; + + if (edge > 0) { + edgeVersion = parseInt(ua.substring(edge + 5, ua.indexOf(".", edge)), 10); + } + + return edge && edgeVersion >= 15; + }; + qq.safari = function() { return navigator.vendor !== undefined && navigator.vendor.indexOf("Apple") !== -1; }; diff --git a/test/unit/s3/chunked-uploads.js b/test/unit/s3/chunked-uploads.js index 14664c53a..60ec05cc6 100644 --- a/test/unit/s3/chunked-uploads.js +++ b/test/unit/s3/chunked-uploads.js @@ -10,6 +10,7 @@ if (qqtest.canDownloadFileAsBlob) { testAccessKey = "testAccessKey", expectedFileSize = 3266, expectedChunks = 2, + isEdge15 = qq.edge15(), chunkSize = Math.round(expectedFileSize / expectedChunks), typicalChunkingOption = { enabled: true, @@ -161,7 +162,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=1&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } var authParts = uploadPartRequest.requestHeaders.Authorization.split(";"); assert.equal(authParts.length, 3); @@ -191,7 +194,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=2&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } var authParts = uploadPartRequest.requestHeaders.Authorization.split(";"); assert.equal(authParts.length, 3); @@ -348,7 +353,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=1&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } assert.equal(uploadPartRequest.requestHeaders.Authorization, "AWS " + testAccessKey + ":thesignature"); uploadPartRequest.respond(200, {ETag: "etag1"}, null); @@ -372,7 +379,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=2&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } assert.equal(uploadPartRequest.requestHeaders.Authorization, "AWS " + testAccessKey + ":thesignature"); uploadPartRequest.respond(200, {ETag: "etag2"}, null); @@ -811,7 +820,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=1&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } assert.equal(uploadPartRequest.requestHeaders.Authorization.indexOf("AWS " + testAccessKey + ":"), 0, "Upload part 1 request Authorization header is invalid"); uploadPartRequest.respond(200, {ETag: "etag1"}, null); @@ -823,7 +834,9 @@ if (qqtest.canDownloadFileAsBlob) { assert.equal(uploadPartRequest.url, testS3Endpoint + "/" + uploader.getKey(0) + "?partNumber=2&uploadId=123"); assert.ok(uploadPartRequest.requestHeaders["x-amz-date"]); - assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + if (isEdge15) { + assert.equal(uploadPartRequest.requestHeaders["Content-Type"], ""); + } assert.equal(uploadPartRequest.requestHeaders.Authorization.indexOf("AWS " + testAccessKey + ":"), 0, "Upload part 2 request Authorization header is invalid"); uploadPartRequest.respond(200, {ETag: "etag2"}, null);