mirror of
https://github.com/silkimen/cordova-plugin-advanced-http.git
synced 2024-10-06 09:12:13 +08:00
fix #296: [Bug] [browser] multipart requests are not serialized correctly
This commit is contained in:
parent
aded59e3d1
commit
78db1dc516
45
src/browser/cordova-http-plugin.js
vendored
45
src/browser/cordova-http-plugin.js
vendored
@ -37,6 +37,39 @@ function serializeParams(params) {
|
|||||||
}).join('&');
|
}).join('&');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function decodeB64(dataString) {
|
||||||
|
var binarString = atob(dataString);
|
||||||
|
var bytes = new Uint8Array(binarString.length);
|
||||||
|
|
||||||
|
for (var i = 0; i < binarString.length; ++i) {
|
||||||
|
bytes[i] = binarString.charCodeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes.buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
function processMultipartData(data) {
|
||||||
|
if (!data) return null;
|
||||||
|
|
||||||
|
var fd = new FormData();
|
||||||
|
|
||||||
|
for (var i = 0; i < data.buffers.length; ++i) {
|
||||||
|
var buffer = data.buffers[i];
|
||||||
|
var name = data.names[i];
|
||||||
|
var fileName = data.fileNames[i];
|
||||||
|
var type = data.types[i];
|
||||||
|
|
||||||
|
if (fileName) {
|
||||||
|
fd.append(name, new Blob([decodeB64(buffer)], {type: type}), fileName);
|
||||||
|
} else {
|
||||||
|
// we assume it's plain text if no filename was given
|
||||||
|
fd.append(name, atob(buffer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
function deserializeResponseHeaders(headers) {
|
function deserializeResponseHeaders(headers) {
|
||||||
var headerMap = {};
|
var headerMap = {};
|
||||||
var arr = headers.trim().split(/[\r\n]+/);
|
var arr = headers.trim().split(/[\r\n]+/);
|
||||||
@ -161,6 +194,18 @@ function sendRequest(method, withData, opts, success, failure) {
|
|||||||
processedData = serializeParams(data);
|
processedData = serializeParams(data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'multipart':
|
||||||
|
const contentType = getHeaderValue(headers, 'Content-Type');
|
||||||
|
|
||||||
|
// intentionally don't set a default content type
|
||||||
|
// it's set by the browser together with the content disposition string
|
||||||
|
if (contentType) {
|
||||||
|
headers['Content-Type'] = contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
processedData = processMultipartData(data);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'raw':
|
case 'raw':
|
||||||
setDefaultContentType(headers, 'application/octet-stream');
|
setDefaultContentType(headers, 'application/octet-stream');
|
||||||
processedData = data;
|
processedData = data;
|
||||||
|
Loading…
Reference in New Issue
Block a user