[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user asfgit closed the pull request at: https://github.com/apache/cordova-plugin-file-transfer/pull/122 --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user dblotsky commented on the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#issuecomment-164065701 Ah, gotcha. Thanks for the explanation. If the tests pass, then it LGTM! --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user dblotsky commented on the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#issuecomment-163736130 Thanks for documenting! What I mean is: is this a supported feature in the first place? --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user daserge commented on the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#issuecomment-163852420 This fixes the manual test for camera plugin when [DATA_URI output is selected](https://github.com/apache/cordova-plugin-camera/blob/e1911a3c78592a23358caa0c4fc9429456942702/tests/tests.js#L121) and the file is [uploaded via file-transfer](https://github.com/apache/cordova-plugin-camera/blob/e1911a3c78592a23358caa0c4fc9429456942702/tests/tests.js#L170) so the scenario seems to be expected to work. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
GitHub user daserge opened a pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122 CB-9837 Add data URI support to file-transfer upload on iOS Adds iOS and Windows implementation Adds corresponding tests [Jira issue](https://issues.apache.org/jira/browse/CB-9837) You can merge this pull request into a Git repository by running: $ git pull https://github.com/MSOpenTech/cordova-plugin-file-transfer CB-9837 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/cordova-plugin-file-transfer/pull/122.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #122 commit f06eb15183943ceff65eacdf583ba2d787615ee2 Author: dasergeDate: 2015-12-09T16:08:14Z CB-9837 Add data URI support to file-transfer upload on iOS Adds iOS and Windows implementation Adds corresponding tests --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user dblotsky commented on the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#issuecomment-163464535 Are base64-encoded files documented as supported by the file transfer API? --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user dblotsky commented on a diff in the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#discussion_r47181683 --- Diff: src/windows/FileTransferProxy.js --- @@ -89,19 +179,141 @@ exec(win, fail, 'FileTransfer', 'upload', var isMultipart = typeof headers["Content-Type"] === 'undefined'; if (!filePath || (typeof filePath !== 'string')) { -errorCallback(new FTErr(FTErr.FILE_NOT_FOUND_ERR,null,server)); +errorCallback(new FTErr(FTErr.FILE_NOT_FOUND_ERR, null, server)); return; } -if (filePath.substr(0, 8) === "file:///") { -filePath = appData.localFolder.path + filePath.substr(8).split("/").join("\\"); -} else if (filePath.indexOf('ms-appdata:///') === 0) { -// Handle 'ms-appdata' scheme -filePath = filePath.replace('ms-appdata:///local', appData.localFolder.path) - .replace('ms-appdata:///temp', appData.temporaryFolder.path); -} else if (filePath.indexOf('cdvfile://') === 0) { -filePath = filePath.replace('cdvfile://localhost/persistent', appData.localFolder.path) - .replace('cdvfile://localhost/temporary', appData.temporaryFolder.path); +if (filePath.indexOf("data:") === 0 && filePath.indexOf("base64") !== -1) { +// First a DataWriter object is created, backed by an in-memory stream where +// the data will be stored. +var writer = Windows.Storage.Streams.DataWriter(new Windows.Storage.Streams.InMemoryRandomAccessStream()); +writer.unicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.utf8; +writer.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian; + +var commaIndex = filePath.indexOf(","); +if (commaIndex === -1) { +errorCallback(new FTErr(FTErr.INVALID_URL_ERR, fileName, server, null, null, "No comma in data: URI")); +return; +} + +// Create internal download operation object +fileTransferOps[uploadId] = new FileTransferOperation(FileTransferOperation.PENDING, null); + +var fileDataString = filePath.substr(commaIndex + 1); + +function stringToByteArray(str) { +var byteCharacters = atob(str); +var byteNumbers = new Array(byteCharacters.length); +for (var i = 0; i < byteCharacters.length; i++) { +byteNumbers[i] = byteCharacters.charCodeAt(i); +} +return new Uint8Array(byteNumbers); +}; + +// setting request headers for uploader +var uploader = new Windows.Networking.BackgroundTransfer.BackgroundUploader(); +uploader.method = httpMethod; +for (var header in headers) { +if (headers.hasOwnProperty(header)) { +uploader.setRequestHeader(header, headers[header]); +} +} + +if (isMultipart) { +// adding params supplied to request payload +var multipartParams = ''; +for (var key in params) { +if (params.hasOwnProperty(key)) { +multipartParams += LINE_START + BOUNDARY + LINE_END; +multipartParams += "Content-Disposition: form-data; name=\"" + key + "\""; --- End diff -- Is there a library that creates HTTP requests with forms? --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user daserge commented on a diff in the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#discussion_r47194431 --- Diff: src/windows/FileTransferProxy.js --- @@ -89,19 +179,141 @@ exec(win, fail, 'FileTransfer', 'upload', var isMultipart = typeof headers["Content-Type"] === 'undefined'; if (!filePath || (typeof filePath !== 'string')) { -errorCallback(new FTErr(FTErr.FILE_NOT_FOUND_ERR,null,server)); +errorCallback(new FTErr(FTErr.FILE_NOT_FOUND_ERR, null, server)); return; } -if (filePath.substr(0, 8) === "file:///") { -filePath = appData.localFolder.path + filePath.substr(8).split("/").join("\\"); -} else if (filePath.indexOf('ms-appdata:///') === 0) { -// Handle 'ms-appdata' scheme -filePath = filePath.replace('ms-appdata:///local', appData.localFolder.path) - .replace('ms-appdata:///temp', appData.temporaryFolder.path); -} else if (filePath.indexOf('cdvfile://') === 0) { -filePath = filePath.replace('cdvfile://localhost/persistent', appData.localFolder.path) - .replace('cdvfile://localhost/temporary', appData.temporaryFolder.path); +if (filePath.indexOf("data:") === 0 && filePath.indexOf("base64") !== -1) { +// First a DataWriter object is created, backed by an in-memory stream where +// the data will be stored. +var writer = Windows.Storage.Streams.DataWriter(new Windows.Storage.Streams.InMemoryRandomAccessStream()); +writer.unicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.utf8; +writer.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian; + +var commaIndex = filePath.indexOf(","); +if (commaIndex === -1) { +errorCallback(new FTErr(FTErr.INVALID_URL_ERR, fileName, server, null, null, "No comma in data: URI")); +return; +} + +// Create internal download operation object +fileTransferOps[uploadId] = new FileTransferOperation(FileTransferOperation.PENDING, null); + +var fileDataString = filePath.substr(commaIndex + 1); + +function stringToByteArray(str) { +var byteCharacters = atob(str); +var byteNumbers = new Array(byteCharacters.length); +for (var i = 0; i < byteCharacters.length; i++) { +byteNumbers[i] = byteCharacters.charCodeAt(i); +} +return new Uint8Array(byteNumbers); +}; + +// setting request headers for uploader +var uploader = new Windows.Networking.BackgroundTransfer.BackgroundUploader(); +uploader.method = httpMethod; +for (var header in headers) { +if (headers.hasOwnProperty(header)) { +uploader.setRequestHeader(header, headers[header]); +} +} + +if (isMultipart) { +// adding params supplied to request payload +var multipartParams = ''; +for (var key in params) { +if (params.hasOwnProperty(key)) { +multipartParams += LINE_START + BOUNDARY + LINE_END; +multipartParams += "Content-Disposition: form-data; name=\"" + key + "\""; --- End diff -- None I've found for Windows and `createUploadFromStreamAsync`. I think the current approach works as it is consistent with [Android](https://github.com/apache/cordova-plugin-file-transfer/blob/a9470ff1cc313be542f625f857d33fb14a520d6f/src/android/FileTransfer.java#L385-L411) and [iOS code](https://github.com/apache/cordova-plugin-file-transfer/blob/a9470ff1cc313be542f625f857d33fb14a520d6f/src/ios/CDVFileTransfer.m#L197-L225) for multipart forms and allows a fine tuning. Alternative could be saving to a temporary file and using `BackgroundTransferContentPart` but it will be less efficient. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org
[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...
Github user daserge commented on the pull request: https://github.com/apache/cordova-plugin-file-transfer/pull/122#issuecomment-163520007 Updated the docs, thanks. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- - To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org