来自本地存储的Titanium 3.X getFile()

时间:2014-09-01 11:16:14

标签: android titanium android-camera appcelerator appcelerator-mobile

在Android 4+上使用Titanium我想访问一个用相机拍摄的jpeg文件。我需要实现2个目标,即返回EXIF数据并将字节传输到API端点。我的问题是我无法访问该文件...

我使用第三方模块处理文件选择(多图像选择器),它使用模拟器上的文件管理器应用程序返回文件位置列表(GenyMotion)我可以确认磁盘上的位置是正确。但是,以下内容始终返回false ...

var file = Ti.Filesystem.getFile('/mnt/sdcard/DCIM/Camera/IMG_20140901_083735.jpg');
Ti.API.info('Do we have a file? ' (file.exists()? 'YES' : 'NO'));

上面的输出是...... 我们有文件吗? NO

进一步阅读显示,Titanium有5个预定义的文件夹位置,可以传递给getFile()方法,上述代码无法正常工作的一个可能原因是,它是默认的“资源”。文件夹位置?除了一个文件夹位置之外的所有文件夹都是应用程序特定的,例外是externalStorageLocation。现在我对Android设备的理解是,除非存在SD卡,否则使用相机拍摄的任何图像都将存储在内部存储系统中。在我的情况下也是如此,因为下面列出了0个文件......

var extDir = Ti.Filesystem.getExternalStorageDirectory();
var dir = Ti.Filesystem.getFile(extDir);
var dir_files = dir.getDirectoryListing();

Ti.API.info('External files... ' + dir_files.length);

上述输出将是...... 外部文件... 0

所以我认为Appcelerator根本没有包含在其API中访问本地存储(在任何应用程序特定文件夹之外)的能力吗?或者我错过了什么,实际上还有另一种方式?

2 个答案:

答案 0 :(得分:1)

感谢@Bharal,我找到了解决方案......

通过使用Ti.Media.openPhotoGallery()方法,我能够通过检查从成功回调返回的事件对象来识别图像的正确本机路径。

路径在开头缺少'file://',我无法100%确定,但我怀疑这会强制getFile()方法使用绝对路径而不是Resources文件夹中的相对路径

要确认,以下内容将返回文件对象...

var file = Ti.Filesystem.getFile('file://[path]');

其中[path]是设备上文件管理器应用程序中报告的文件夹位置,例如'/mnt/sdcard/DCIM/Camera/IMG_20140901_083735.jpg'

答案 1 :(得分:0)

是的,我不知道。

这是当我在我的Ti应用程序上拍照时使用的wat,但随后我摆脱了那部分,因为我意识到我不需要做照片。图片mon,dey ain'你有时想要什么,哟?

    Ti.Media.openPhotoGallery({ //dissall jus' open up a piccha selectin' ting. ez.
        success:function(event){
            var image = event.media;
            if (event.mediaType==Ti.Media.MEDIA_TYPE_PHOTO){
//so image.nativePath is the path to the image. 
// profileImg be jus' some Ti.UI.createImageView ting yo be puttin in yo' page.
//meyybe yo be wantin' alert(image.nativePath); here too, dat be helpin?
                profileImg.image = image.nativePath; 
            }

        },
        cancel:function(){
            //we cancelled out, why we doin' that?
        }    
    });

现在还没有真正得到帮助'你,但你可以用它来看看本土的路径你可以使用和是,然后看到'如果可能是什么你会被放置'在你的代码中是sam ting。

只求'将上面包装为addEventListener(" click",function(){...});在yo页面上的sam ting,和jus'添加sam元素以放置'如果你想要的话,请加入#39;看到piccha,但我要告诉'你是一个人,有时候是dey ain'值得时间。

但是meyybe哟想要'不要使用模拟器进行调整,dey可以是肌动蛋白。奇怪的哟应该是用一些小手机吗?数据方式你可以找到'如果你得到了记忆韭菜和meyybe一些记忆萌芽,也是一个记忆洋葱。