feat(http): better binary support & XHR support (#7707)

* feat(http): binary upload support

* feat(http): better binary support & XHR support

* fix: linting issue

* chore: moved files from old place to the new one

* chore: Updated NativeScript.api.md

* feat(http): support both ByteBuffer and String

Co-authored-by: Vasil Trifonov <v.trifonov@gmail.com>
This commit is contained in:
Stefan Andres Charsley
2020-01-29 02:22:32 +13:00
committed by Vasil Trifonov
parent a311a922b5
commit e293367dfc
23 changed files with 1249 additions and 486 deletions

View File

@@ -92,6 +92,7 @@ function onRequestComplete(requestId: number, result: org.nativescript.widgets.A
callbacks.resolveCallback({
content: {
raw: result.raw,
toArrayBuffer: () => Uint8Array.from(result.raw.toByteArray()).buffer,
toString: (encoding?: HttpResponseEncoding) => {
let str: string;
if (encoding) {
@@ -180,7 +181,14 @@ function buildJavaOptions(options: httpModule.HttpRequestOptions) {
javaOptions.method = options.method;
}
if (typeof options.content === "string" || options.content instanceof FormData) {
javaOptions.content = options.content.toString();
const nativeString = new java.lang.String(options.content.toString());
const nativeBytes = nativeString.getBytes("UTF-8");
const nativeBuffer = java.nio.ByteBuffer.wrap(nativeBytes);
javaOptions.content = nativeBuffer;
} else if (options.content instanceof ArrayBuffer) {
const typedArray = new Uint8Array(options.content as ArrayBuffer);
const nativeBuffer = java.nio.ByteBuffer.wrap(Array.from(typedArray));
javaOptions.content = nativeBuffer;
}
if (typeof options.timeout === "number") {
javaOptions.timeout = options.timeout;

View File

@@ -95,6 +95,9 @@ export function request(options: httpModule.HttpRequestOptions): Promise<httpMod
if (types.isString(options.content) || options.content instanceof FormData) {
urlRequest.HTTPBody = NSString.stringWithString(options.content.toString()).dataUsingEncoding(4);
} else if (options.content instanceof ArrayBuffer) {
const buffer = options.content as ArrayBuffer;
urlRequest.HTTPBody = NSData.dataWithData(buffer as any);
}
if (types.isNumber(options.timeout)) {
@@ -142,7 +145,15 @@ export function request(options: httpModule.HttpRequestOptions): Promise<httpMod
resolve({
content: {
raw: data,
toString: (encoding?: any) => NSDataToString(data, encoding),
toArrayBuffer: () => interop.bufferFromData(data),
toString: (encoding?: any) => {
const str = NSDataToString(data, encoding);
if (typeof str === "string") {
return str;
} else {
throw new Error("Response content may not be converted to string");
}
},
toJSON: (encoding?: any) => parseJSON(NSDataToString(data, encoding)),
toImage: () => {
ensureImageSource();