cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CB-9837) Add data URI support to file-transfer upload on iOS
Date Thu, 10 Dec 2015 02:12:11 GMT

    [ https://issues.apache.org/jira/browse/CB-9837?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15049865#comment-15049865
] 

ASF GitHub Bot commented on CB-9837:
------------------------------------

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?


> Add data URI support to file-transfer upload on iOS
> ---------------------------------------------------
>
>                 Key: CB-9837
>                 URL: https://issues.apache.org/jira/browse/CB-9837
>             Project: Apache Cordova
>          Issue Type: New Feature
>          Components: Plugin File Transfer
>            Reporter: Juan Antonio
>              Labels: ios, reproduced, triaged
>
> When I send an encoded base64 string image from iOS device with 'data:image/jpeg;base64,'
at the beginning of data image on ft.upload(fileURL...) , plugin file transfer crash. However,
on android works perfectly ONLY if line 'data:image/jpeg;base64,' is present.
> Possible solution:
> If I delete string data 'data:image/jpeg;base64,' for iOS devices and modify plugin file
iOS 'CDVFileTransfer.m' like this:
> - (void)fileDataForUploadCommand:(CDVInvokedUrlCommand*)command
> {
>     NSString* source = (NSString*)[command argumentAtIndex:0];
>     NSData *fileData = [[NSData alloc] initWithBase64EncodedString:source options:NSDataBase64DecodingIgnoreUnknownCharacters];
>     [self uploadData:fileData command:command];
> }
> works perfectly, but it wouldn't accept image path, only base64 string encoded images.
> Thanks.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org


Mime
View raw message