Appcelerator - 文件存储失败
Appcelerator - File storage fail
我复制了一个视频到/Documents/videos/xxxxxx.mp4,然后,当我关闭应用程序并重新启动它时,当我想要获取文件时出现这个错误:
nativeReason = "Could not open file stream for file at path: /var/mobile/Containers/Data/Application/055CE45C-28EC-46F5-9609-F16E357B682E/Documents/videos/1458044667778.mp4\nFile does not exist at path /var/mobile/Containers/Data/Application/055CE45C-28EC-46F5-9609-F16E357B682E/Documents/videos/1458044667778.mp4";
但是我可以在目录中看到这个文件:
有什么问题吗??这发生在 iOS、Ti.SDK 5.2.0.GA
我的代码:
if(OS_IOS){
Ti.API.debug("Media: " + this.get("media").nativePath);
var infile = Ti.Filesystem.getFile(this.get("media").nativePath); //!
}else{
var infile = Ti.Filesystem.getFile(this.get("media"));
}
Ti.API.debug('infile: ' + infile.exists());
var tempFile = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/");
if(!tempFile.exists())
tempFile.createDirectory(); //create videos directory
var tempFile = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/" + new Date().getTime() + ".mp4");
Ti.API.debug('tempFile ' + tempFile.exists()); // tempsFile is always empty
if(OS_IOS){
if (infile.exists() && (!tempFile.exists()) ) { //copy infile to videos/
tempFile.write(infile.read());
}
}else{ //Android
infile.copy(tempFile.nativePath); //copy infile to videos/
}
//Get video, the path saved is correct
var vid = Ti.Filesystem.getFile(video.get("videoFile"));
默认情况下 Ti.Filesystem.getFile() 所有相对路径当前都被解释为相对于资源目录,而不是当前上下文。这是一个已知问题,将在未来版本中解决。 : http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Filesystem-method-getFile
因此,您需要将视频文件名保存在video.get("videoFile")
中,并通过这种方式获取视频:Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/"+video.get("videoFile"));
我复制了一个视频到/Documents/videos/xxxxxx.mp4,然后,当我关闭应用程序并重新启动它时,当我想要获取文件时出现这个错误:
nativeReason = "Could not open file stream for file at path: /var/mobile/Containers/Data/Application/055CE45C-28EC-46F5-9609-F16E357B682E/Documents/videos/1458044667778.mp4\nFile does not exist at path /var/mobile/Containers/Data/Application/055CE45C-28EC-46F5-9609-F16E357B682E/Documents/videos/1458044667778.mp4";
但是我可以在目录中看到这个文件:
有什么问题吗??这发生在 iOS、Ti.SDK 5.2.0.GA
我的代码:
if(OS_IOS){
Ti.API.debug("Media: " + this.get("media").nativePath);
var infile = Ti.Filesystem.getFile(this.get("media").nativePath); //!
}else{
var infile = Ti.Filesystem.getFile(this.get("media"));
}
Ti.API.debug('infile: ' + infile.exists());
var tempFile = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/");
if(!tempFile.exists())
tempFile.createDirectory(); //create videos directory
var tempFile = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/" + new Date().getTime() + ".mp4");
Ti.API.debug('tempFile ' + tempFile.exists()); // tempsFile is always empty
if(OS_IOS){
if (infile.exists() && (!tempFile.exists()) ) { //copy infile to videos/
tempFile.write(infile.read());
}
}else{ //Android
infile.copy(tempFile.nativePath); //copy infile to videos/
}
//Get video, the path saved is correct
var vid = Ti.Filesystem.getFile(video.get("videoFile"));
默认情况下 Ti.Filesystem.getFile() 所有相对路径当前都被解释为相对于资源目录,而不是当前上下文。这是一个已知问题,将在未来版本中解决。 : http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Filesystem-method-getFile
因此,您需要将视频文件名保存在video.get("videoFile")
中,并通过这种方式获取视频:Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, "videos/"+video.get("videoFile"));