Skip to content
This repository has been archived by the owner on Nov 20, 2018. It is now read-only.

Fix for https://github.com/FineUploader/fine-uploader/issues/1952 #2013

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions client/js/s3/s3.xhr.upload.handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -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", "");
}

Expand Down
12 changes: 12 additions & 0 deletions client/js/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down
25 changes: 19 additions & 6 deletions test/unit/s3/chunked-uploads.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ if (qqtest.canDownloadFileAsBlob) {
testAccessKey = "testAccessKey",
expectedFileSize = 3266,
expectedChunks = 2,
isEdge15 = qq.edge15(),
chunkSize = Math.round(expectedFileSize / expectedChunks),
typicalChunkingOption = {
enabled: true,
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down