mirror of
https://github.com/silkimen/cordova-plugin-advanced-http.git
synced 2026-05-31 00:00:07 +08:00
feature #171: support for responseType "blob"
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
# Changelog
|
||||
|
||||
## 2.1.0
|
||||
|
||||
- Feature #216: Support for response type `arraybuffer`
|
||||
- Feature #171: Support for response type `blob`
|
||||
|
||||
## 2.0.11
|
||||
|
||||
- Fixed #221: headers not set on Android when request fails due to non-success status code
|
||||
|
||||
@@ -203,8 +203,9 @@ The options object contains following keys:
|
||||
* `params`: query params to be appended to the URL (only applicable on `get`, `head`, `delete`, `upload` or `download` methods)
|
||||
* `serializer`: data serializer to be used (only applicable on `post`, `put` or `patch` methods), defaults to global serializer value, see [setDataSerializer](#setDataSerializer) for supported values
|
||||
* `responseType`: expected response type, defaults to `text`, needs to be one of the following values:
|
||||
* `text` use this for all kind of text responses (e.g. JSON, XML, HTML, plain text, etc.)
|
||||
* `arraybuffer` use this one for binary responses
|
||||
* `text`: data is returned as decoded string, use this for all kinds of string responses (e.g. JSON, XML, HTML, plain text, etc.)
|
||||
* `arraybuffer`: data is returned as [ArrayBuffer instance](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
|
||||
* `blob`: data is returned as [Blob instance](https://developer.mozilla.org/en-US/docs/Web/API/Blob)
|
||||
* `timeout`: timeout value for the request in seconds, defaults to global timeout value
|
||||
* `followRedirect`: enable or disable automatically following redirects
|
||||
* `headers`: headers object (key value pair), will be merged with global values
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cordova-plugin-advanced-http",
|
||||
"version": "2.0.11",
|
||||
"version": "2.1.0",
|
||||
"description": "Cordova / Phonegap plugin for communicating with HTTP servers using SSL pinning",
|
||||
"scripts": {
|
||||
"updatecert": "node ./scripts/update-e2e-server-cert.js && node ./scripts/update-e2e-client-cert.js",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com https://self-signed.badssl.com http://httpbin.org http://www.columbia.edu 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com https://self-signed.badssl.com http://httpbin.org http://www.columbia.edu 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content: blob:;">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
|
||||
|
||||
+25
-1
@@ -697,12 +697,13 @@ const tests = [
|
||||
},
|
||||
{
|
||||
description: 'should fetch binary correctly when response type is "arraybuffer"',
|
||||
expected: 'resolved: {"hash":-1032603775,"byteLength":35588}',
|
||||
expected: 'resolved: {"isArrayBuffer:true,"hash":-1032603775,"byteLength":35588}',
|
||||
func: function (resolve, reject) {
|
||||
var url = 'https://httpbin.org/image/jpeg';
|
||||
var options = { method: 'get', responseType: 'arraybuffer' };
|
||||
var success = function (response) {
|
||||
resolve({
|
||||
isArrayBuffer: response.data.constructor === ArrayBuffer,
|
||||
hash: helpers.hashArrayBuffer(response.data),
|
||||
byteLength: response.data.byteLength
|
||||
});
|
||||
@@ -711,10 +712,33 @@ const tests = [
|
||||
},
|
||||
validationFunc: function (driver, result) {
|
||||
result.type.should.be.equal('resolved');
|
||||
result.data.isArrayBuffer.should.be.equal(true);
|
||||
result.data.hash.should.be.equal(-1032603775);
|
||||
result.data.byteLength.should.be.equal(35588);
|
||||
}
|
||||
},
|
||||
{
|
||||
description: 'should fetch binary correctly when response type is "blob"',
|
||||
expected: 'resolved: {"isBlob":true,byteLength":35588}',
|
||||
func: function (resolve, reject) {
|
||||
var url = 'https://httpbin.org/image/jpeg';
|
||||
var options = { method: 'get', responseType: 'blob' };
|
||||
var success = function (response) {
|
||||
resolve({
|
||||
isBlob: response.data.constructor === Blob,
|
||||
type: response.data.type,
|
||||
byteLength: response.data.size
|
||||
});
|
||||
};
|
||||
cordova.plugin.http.sendRequest(url, options, success, reject);
|
||||
},
|
||||
validationFunc: function (driver, result) {
|
||||
result.type.should.be.equal('resolved');
|
||||
result.data.isBlob.should.be.equal(true);
|
||||
result.data.type.should.be.equal('image/jpeg');
|
||||
result.data.byteLength.should.be.equal(35588);
|
||||
}
|
||||
},
|
||||
{
|
||||
description: 'should decode error body even if response type is "arraybuffer"',
|
||||
expected: 'rejected: {"status": 418, ...',
|
||||
|
||||
+11
-2
@@ -3,7 +3,7 @@ module.exports = function init(jsUtil, cookieHandler, messages, base64) {
|
||||
var validCertModes = ['default', 'nocheck', 'pinned', 'legacy'];
|
||||
var validClientAuthModes = ['none', 'systemstore', 'buffer'];
|
||||
var validHttpMethods = ['get', 'put', 'post', 'patch', 'head', 'delete', 'upload', 'download'];
|
||||
var validResponseTypes = ['text','arraybuffer'];
|
||||
var validResponseTypes = ['text','arraybuffer', 'blob'];
|
||||
|
||||
var interface = {
|
||||
b64EncodeUnicode: b64EncodeUnicode,
|
||||
@@ -238,7 +238,16 @@ module.exports = function init(jsUtil, cookieHandler, messages, base64) {
|
||||
return function (response) {
|
||||
// arraybuffer
|
||||
if (responseType === validResponseTypes[1]) {
|
||||
response.data = base64.toArrayBuffer(response.data);
|
||||
var buffer = base64.toArrayBuffer(response.data);
|
||||
response.data = buffer;
|
||||
}
|
||||
|
||||
// blob
|
||||
if (responseType === validResponseTypes[2]) {
|
||||
var buffer = base64.toArrayBuffer(response.data);
|
||||
var type = response.headers['content-type'] || '';
|
||||
var blob = new Blob([ buffer ], { type: type });
|
||||
response.data = blob;
|
||||
}
|
||||
|
||||
cb(response);
|
||||
|
||||
Reference in New Issue
Block a user