diff --git a/tests/app/http/http-tests.ts b/tests/app/http/http-tests.ts index e1f01037f..98e4a71a2 100644 --- a/tests/app/http/http-tests.ts +++ b/tests/app/http/http-tests.ts @@ -249,7 +249,7 @@ export var test_getContentAsFile = function (done) { // >> http-get-urlfile-content var filePath = fs.path.join(fs.knownFolders.documents().path, "test.png"); - http.getFile("https://httpbin.org/image/png", filePath).then(function (r) { + http.getFile("https://httpbin.org/image/png?testQuery=query&anotherParam=param", filePath).then(function (r) { //// Argument (r) is File! // >> (hide) result = r; @@ -457,7 +457,7 @@ export var test_request_responseContentToImageShouldReturnCorrectImage = functio export var test_request_responseContentToFileFromUrlShouldReturnCorrectFile = function (done) { var result; - http.request({ url: "https://raw.githubusercontent.com/NativeScript/NativeScript/master/apps/tests/logo.png", method: "GET" }).then(function (response) { + http.request({ url: "https://raw.githubusercontent.com/NativeScript/NativeScript/master/apps/app/ui-tests-app/image-view/red.png", method: "GET" }).then(function (response) { result = response.content.toFile(); try { TKUnit.assert(result instanceof fs.File, "Result from toFile() should be valid File object!"); @@ -474,7 +474,7 @@ export var test_request_responseContentToFileFromUrlShouldReturnCorrectFile = fu export var test_request_responseContentToFileFromContentShouldReturnCorrectFile = function (done) { var result; - http.request({ url: "https://httpbin.org/image/png", method: "GET" }).then(function (response) { + http.request({ url: "https://httpbin.org/image/png?queryString=param&another=anotherParam", method: "GET" }).then(function (response) { result = response.content.toFile(); try { TKUnit.assert(result instanceof fs.File, "Result from toFile() should be valid File object!"); diff --git a/tns-core-modules/http/http-request/http-request-common.ts b/tns-core-modules/http/http-request/http-request-common.ts new file mode 100644 index 000000000..63c9e73b0 --- /dev/null +++ b/tns-core-modules/http/http-request/http-request-common.ts @@ -0,0 +1,17 @@ +import * as fsModule from "../../file-system"; + +export function getFilenameFromUrl(url: string) { + const fs: typeof fsModule = require("file-system"); + const slashPos = url.lastIndexOf('/') + 1; + const questionMarkPos = url.lastIndexOf('?'); + + let actualFileName: string; + if (questionMarkPos !== -1) { + actualFileName = url.substring(slashPos, questionMarkPos); + } else { + actualFileName = url.substring(slashPos); + } + + const result = fs.path.join(fs.knownFolders.documents().path, actualFileName); + return result; +} \ No newline at end of file diff --git a/tns-core-modules/http/http-request/http-request.android.ts b/tns-core-modules/http/http-request/http-request.android.ts index aee764a4d..8c43b9fbb 100644 --- a/tns-core-modules/http/http-request/http-request.android.ts +++ b/tns-core-modules/http/http-request/http-request.android.ts @@ -4,6 +4,7 @@ import * as imageSourceModule from "../../image-source"; import * as platformModule from "../../platform"; import * as fsModule from "../../file-system"; +import { getFilenameFromUrl } from "./http-request-common"; // this is imported for definition purposes only import * as http from "../../http"; @@ -119,11 +120,11 @@ function onRequestComplete(requestId: number, result: org.nativescript.widgets.A } }); }, - toFile: (destinationFilePath?: string) => { - var fs: typeof fsModule = require("file-system"); - var fileName = callbacks.url; + toFile: (destinationFilePath: string) => { + var fs: typeof fsModule = require("file-system"); + if (!destinationFilePath) { - destinationFilePath = fs.path.join(fs.knownFolders.documents().path, fileName.substring(fileName.lastIndexOf('/') + 1)); + destinationFilePath = getFilenameFromUrl(callbacks.url); } var stream: java.io.FileOutputStream; try { diff --git a/tns-core-modules/http/http-request/http-request.ios.ts b/tns-core-modules/http/http-request/http-request.ios.ts index b33c5be56..59d1b6eb5 100644 --- a/tns-core-modules/http/http-request/http-request.ios.ts +++ b/tns-core-modules/http/http-request/http-request.ios.ts @@ -11,6 +11,7 @@ import * as utils from "../../utils/utils"; import getter = utils.ios.getter; import * as domainDebugger from "../../debugger/debugger"; +import { getFilenameFromUrl } from "./http-request-common"; export enum HttpResponseEncoding { UTF8, @@ -148,11 +149,11 @@ export function request(options: http.HttpRequestOptions): Promise { + toFile: (destinationFilePath?: string) => { var fs: typeof fsModule = require("file-system"); - var fileName = options.url; + if (!destinationFilePath) { - destinationFilePath = fs.path.join(fs.knownFolders.documents().path, fileName.substring(fileName.lastIndexOf('/') + 1)); + destinationFilePath = getFilenameFromUrl(options.url); } if (data instanceof NSData) { data.writeToFileAtomically(destinationFilePath, true); diff --git a/tns-core-modules/http/http.ts b/tns-core-modules/http/http.ts index ccbb802de..7c7861255 100644 --- a/tns-core-modules/http/http.ts +++ b/tns-core-modules/http/http.ts @@ -7,13 +7,13 @@ export function getString(arg: any): Promise { return new Promise((resolve, reject) => { httpRequest.request(typeof arg === "string" ? { url: arg, method: "GET" } : arg) .then(r => { - try { - var str = r.content.toString(); - resolve(str); - } catch (e) { - reject(e); - } - }, e => reject(e)); + try { + var str = r.content.toString(); + resolve(str); + } catch (e) { + reject(e); + } + }, e => reject(e)); }); } @@ -21,13 +21,13 @@ export function getJSON(arg: any): Promise { return new Promise((resolve, reject) => { httpRequest.request(typeof arg === "string" ? { url: arg, method: "GET" } : arg) .then(r => { - try { - var json = r.content.toJSON(); - resolve(json); - } catch (e) { - reject(e); - } - }, e => reject(e)); + try { + var json = r.content.toJSON(); + resolve(json); + } catch (e) { + reject(e); + } + }, e => reject(e)); }); }