You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Ian Clelland (JIRA)" <ji...@apache.org> on 2014/06/05 16:25:01 UTC

[jira] [Commented] (CB-6881) FileTransfer passes file:/// URLs to File when cdvfile:// is expected

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

Ian Clelland commented on CB-6881:
----------------------------------

The JS side of FileTransfer should accept any URL which is recognizable by File, but should translate that to an internal {{cdvfile://}} url before calling any of the File methods (or else File should accept other URLs and resolve them sooner)

> FileTransfer passes file:/// URLs to File when cdvfile:// is expected
> ---------------------------------------------------------------------
>
>                 Key: CB-6881
>                 URL: https://issues.apache.org/jira/browse/CB-6881
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin File, Plugin File Transfer
>            Reporter: Ian Clelland
>            Assignee: Ian Clelland
>
> From CB-6394 Comment:
> Hi Ian,
> I have just been debugging an issue I was having with the FileTransfer code which was causing me a problem in Cordova 3.5.0.
> In previous versions, I was using code along the following lines, where I would be using entry.toURL():
> {code}
> var fileTransfer = new FileTransfer();
> fileTransfer.download(
> 'http://myurl.com/file.pdf',
> entry.toURL(),
> function ()
> { /* file downloaded */ }
> ,
> function (err)
> { /* console.log(error) */ }
> );
> {code}
> But in 3.5.0 this did not seem to work - when I looked at the File plugin (on iOS), particularly CDVFile, there's the following method which was the reason why:
> {code}
> - (NSString *)filesystemNameForLocalURI:(NSURL *)uri
> {
> if ([[uri scheme] isEqualToString:kCDVFilesystemURLPrefix] && [[uri host] isEqualToString:@"localhost"]) {
> NSArray *pathComponents = [uri pathComponents];
> if (pathComponents != nil && pathComponents.count > 1)
> { return [pathComponents objectAtIndex:1]; }
> } else if ([[uri scheme] isEqualToString:kCDVAssetsLibraryScheme])
> { return @"assets-library"; }
> return nil;
> }
> {code}
> Which is called within FileTransfer, when downloading a file, and uses the {{target}} parameter to resolve to the File System to store your download.
> That's fine, but in the documentation here: https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md, it recommends using toURL() - however, when I use this on a File or Directory Entry, I receive a path string beginning with 'file:///'.
> So when Cordova attempts to resolve this location, using {{filesystemNameForLocalURI}} to store the downloaded file, it's never going to be able to create the target location, since the scheme never matches those two checks ('cdvfile' or 'assets library').
> In order to get around the issue, I had to use toInternalURL() instead, which return my entry path as a cdvfile.
> Thus, I wondered whether the documentation is wrong?
> Either way, I'm a little confused! I hope my query makes sense.
> Many thanks,
> Kelvin



--
This message was sent by Atlassian JIRA
(v6.2#6252)