[GitHub] cordova-plugin-file-transfer pull request: CB-9837 Add data URI su...

2015-12-14 Thread asfgit
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...

2015-12-11 Thread dblotsky
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...

2015-12-10 Thread dblotsky
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...

2015-12-10 Thread daserge
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...

2015-12-09 Thread daserge
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: daserge 
Date:   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...

2015-12-09 Thread dblotsky
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...

2015-12-09 Thread dblotsky
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...

2015-12-09 Thread daserge
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...

2015-12-09 Thread daserge
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