将使用相机拍摄的照片捕获并存储到本地数据库/ PhoneGap / Cordova / iOS中
我目前正在使用Phonegap / Cordova和jQuerymobile构buildiOS应用程序。 这个想法是用相机拍摄照片并存储拍摄的图像以供将来使用。 我想将path/文件名存储到我的本地数据库,并将图片文件移动到iPhone中的一个永久的地方。
有人能给我一个例子吗?
好的,这是解决scheme。
-
在Html文件中
-
我有一个图片标签用于显示相机拍摄的照片:
-
我有一个运行拍照function的button:捕捉照片
-
捕捉照片的function是(拍摄照片时,“smallImage”ID的scr填充照片的path)
function capturePhoto() { // Take picture using device camera and retrieve image as base64-encoded string navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 }); } //Callback function when the picture has been successfully taken function onPhotoDataSuccess(imageData) { // Get image handle var smallImage = document.getElementById('smallImage'); // Unhide image elements smallImage.style.display = 'block'; smallImage.src = imageData; } //Callback function when the picture has not been successfully taken function onFail(message) { alert('Failed to load picture because: ' + message); }
-
现在我想将图片移动到永久文件夹中,然后将链接保存到我的数据库中:
function movePic(file){ window.resolveLocalFileSystemURI(file, resolveOnSuccess, resOnError); } //Callback function when the file system uri has been resolved function resolveOnSuccess(entry){ var d = new Date(); var n = d.getTime(); //new file name var newFileName = n + ".jpg"; var myFolderApp = "EasyPacking"; window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys) { //The folder is created if doesn't exist fileSys.root.getDirectory( myFolderApp, {create:true, exclusive: false}, function(directory) { entry.moveTo(directory, newFileName, successMove, resOnError); }, resOnError); }, resOnError); } //Callback function when the file has been moved successfully - inserting the complete path function successMove(entry) { //I do my insert with "entry.fullPath" as for the path } function resOnError(error) { alert(error.code); }
-
我的文件已被保存在数据库中显示它,我把包含图像src行的“file://”前面
希望这个帮助。 J.
PS: – 非常感谢Simon Mac Donald(http://hi.im/simonmacdonald)在google上发表的博文。;
杰罗姆的答案就像一个魅力..唯一要指出的人,当他们想要使用该文件不使用entry.fullPath,因为这有时会导致问题,使用entry.toURL(),因为这会给你满path而不必将“file://”添加到path以及绕过SD卡存储等问题。
if (index == '0') { var options = { quality: 50, destinationType: Camera.DestinationType.FILE_URI, sourceType: Camera.PictureSourceType.CAMERA, allowEdit: false, encodingType: Camera.EncodingType.JPEG, popoverOptions: CameraPopoverOptions, saveToPhotoAlbum: false, correctOrientation:true }; $cordovaCamera.getPicture(options).then(movePic,function(imageData) { $rootScope.imageUpload=imageData; }, function(err) { console.error(err); }); function movePic(imageData){ console.log("move pic"); console.log(imageData); window.resolveLocalFileSystemURL(imageData, resolveOnSuccess, resOnError); } function resolveOnSuccess(entry){ console.log("resolvetosuccess"); //new file name var newFileName = itemID + ".jpg"; var myFolderApp = "ImgFolder"; window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys) { console.log("folder create"); //The folder is created if doesn't exist fileSys.root.getDirectory( myFolderApp, {create:true, exclusive: false}, function(directory) { console.log("move to file.."); entry.moveTo(directory, newFileName, successMove, resOnError); console.log("release"); }, resOnError); }, resOnError); } function successMove(entry) { //I do my insert with "entry.fullPath" as for the path console.log("success"); //this is file path, customize your path console.log(entry); } function resOnError(error) { console.log("failed"); } }
我刚刚根据Jérôme的回答做了一个有承诺的工作:
function moveFile(file){ var deferred = $q.defer(); window.resolveLocalFileSystemURL(file, function resolveOnSuccess(entry){ var dateTime = moment.utc(new Date).format('YYYYMMDD_HHmmss'); var newFileName = dateTime + ".jpg"; var newDirectory = "photos"; window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys) { //The folder is created if doesn't exist fileSys.root.getDirectory( newDirectory, {create:true, exclusive: false}, function(directory) { entry.moveTo(directory, newFileName, function (entry) { //Now we can use "entry.toURL()" for the img src console.log(entry.toURL()); deferred.resolve(entry); }, resOnError); }, resOnError); }, resOnError); }, resOnError); return deferred.promise; } function resOnError(error) { console.log('Awwww shnap!: ' + error.code); }
有3个步骤:
- 获取照片。 苹果公司在iPhone开发网站上有一个很好的例子
- 获取你的文档目录,如下所示:
NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [arrayPaths objectAtIndex:0];
- 最后,将步骤1中获得的UIImage存储到磁盘中:
NSString *filename = @"mypic.png"; NSString *fullpath = [docDir stringByAppendingPathComponent:filename]; [UIImagePNGRepresentation(image) writeToFile:fullpath atomically:YES];