Phonegap - Сохранить изображение с URL-адреса в галерее устройств
Я разрабатываю приложение phonegap, и мне нужно сохранить изображение с URL-адреса в галерею устройств.
Я не могу найти в Phonegap Api способ сделать это, а также я не нашел для него плагин для телефонных разговоров.
Мне нужно, чтобы он работал с Iphone и Android
Спасибо большое!
Ответы
Ответ 1
Это код загрузки файла, который может использоваться кем угодно. У вас есть только три параметра, чтобы использовать это как -
1) URL
2) Имя папки, которое вы хотите создать на своей Sdcard
3) Имя файла (вы можете указать любое имя в файл)
Все типы файлов можно загрузить с помощью этого кода. вы можете использовать это как .js
И это работает и на IOS
.
//First step check parameters mismatch and checking network connection if available call download function
function DownloadFile(URL, Folder_Name, File_Name) {
//Parameters mismatch check
if (URL == null && Folder_Name == null && File_Name == null) {
return;
}
else {
//checking Internet connection availablity
var networkState = navigator.connection.type;
if (networkState == Connection.NONE) {
return;
} else {
download(URL, Folder_Name, File_Name); //If available download function call
}
}
}
//Второй шаг для получения разрешения на запись и создания папки
function download(URL, Folder_Name, File_Name) {
//step to request a file system
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fileSystemSuccess, fileSystemFail);
function fileSystemSuccess(fileSystem) {
var download_link = encodeURI(URL);
ext = download_link.substr(download_link.lastIndexOf('.') + 1); //Get extension of URL
var directoryEntry = fileSystem.root; // to get root path of directory
directoryEntry.getDirectory(Folder_Name, { create: true, exclusive: false }, onDirectorySuccess, onDirectoryFail); // creating folder in sdcard
var rootdir = fileSystem.root;
var fp = rootdir.fullPath; // Returns Fulpath of local directory
fp = fp + "/" + Folder_Name + "/" + File_Name + "." + ext; // fullpath and name of the file which we want to give
// download function call
filetransfer(download_link, fp);
}
function onDirectorySuccess(parent) {
// Directory created successfuly
}
function onDirectoryFail(error) {
//Error while creating directory
alert("Unable to create new directory: " + error.code);
}
function fileSystemFail(evt) {
//Unable to access file system
alert(evt.target.error.code);
}
}
//Третий шаг для загрузки файла в созданную папку
function filetransfer(download_link, fp) {
var fileTransfer = new FileTransfer();
// File download function with URL and local path
fileTransfer.download(download_link, fp,
function (entry) {
alert("download complete: " + entry.fullPath);
},
function (error) {
//Download abort errors or download failed errors
alert("download error source " + error.source);
//alert("download error target " + error.target);
//alert("upload error code" + error.code);
}
);
}
Полезная ссылка
Ответ 2
Последняя версия Кордовы (3.3+), новая (1.0.0+) версия Файла использует URL-адреса файловой системы вместо пути к файлу. Таким образом, чтобы принятый ответ работал с более новой версией в функции FileSystemSuccess, измените строку:
var fp = rootdir.fullPath;
в
var fp = rootdir.toURL();
Ответ 3
Еще один простой способ - использовать плагин Cordova/Phonegap Canvas2ImagePlugin. Установите его и добавьте следующую функцию в свой код, который основан на getImageDataURL() от Raul Sanchez (Спасибо!).
function saveImageToPhone(url, success, error) {
var canvas, context, imageDataUrl, imageData;
var img = new Image();
img.onload = function() {
canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
try {
imageDataUrl = canvas.toDataURL('image/jpeg', 1.0);
imageData = imageDataUrl.replace(/data:image\/jpeg;base64,/, '');
cordova.exec(
success,
error,
'Canvas2ImagePlugin',
'saveImageDataToLibrary',
[imageData]
);
}
catch(e) {
error(e.message);
}
};
try {
img.src = url;
}
catch(e) {
error(e.message);
}
}
Используйте его следующим образом:
var success = function(msg){
console.info(msg);
};
var error = function(err){
console.error(err);
};
saveImageToPhone('myimage.jpg', success, error);
Ответ 4
Это можно сделать, используя блокировку телефона file:
var url = 'http://image_url';
var filePath = 'local/path/to/your/file';
var fileTransfer = new FileTransfer();
var uri = encodeURI(url);
fileTransfer.download(
uri,
filePath,
function(entry) {
console.log("download complete: " + entry.fullPath);
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
},
false,
{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
Ответ 5
Может быть, вы можете попробовать плагин, который я написал для IOS
вот ссылка git: https://github.com/Nomia/ImgDownloader
Краткий пример:
document.addEventListener("deviceready",onDeviceReady);
//google logo url
url = 'https://www.google.com/images/srpr/logo11w.png';
onDeviceReady = function(){
cordova.plugins.imgDownloader.downloadWithUrl(url,function(){
alert("success");
},function(){
alert("error");
});
}
//also you can try dataUri like: 1px gif
//url = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
вы также можете сохранить локальный файл в галерее изображений с помощью метода скачать
Ответ 6
В настоящее время я работаю над cordova-plugin-photo-library.
Он может сохранять изображение, заданное url (file://или data:). Работает на ios и android, jpeg/png/gif:
cordova.plugins.photoLibrary.saveImage(url, 'My album', function () {}, function (err) {});
Ответ 7
Я изначально получил "Could not create target file"
.
Для этого используйте encodeURI()
на url для загрузки:
var DBuri = encodeURI("https://dl.dropbox.com/u/13253550/db02.xml");
fileTransfer.download(
DBuri,
sPath + "database.xml",
И код в этом потоке работал отлично. Просто поставьте его здесь.
Ответ 8
Самый простой подход
Если вы в порядке, находясь в папке загрузки, выполните следующие
-
Установите плагин для браузера In-App
cordova plugin add cordova-plugin-inappbrowser
-
Создайте кнопку загрузки с помощью
onclick="window.open("Image_URL", '_system');
Не только загрузит изображение, которое он предложит, чтобы открыть изображение в соответствующем приложении или в браузере.
Ответ 9
Я очистил и завернул код, предложенный Сухасом выше - принятый ответ в службе angular, чтобы он мог быть легко использован в другом приложении. Вы можете найти snipet здесь.
Чтобы использовать его, вы включаете script в app.js(и ваш файл index.html), затем:
angular.module('myApp.controllers.whatever', [])
.controller('WhateverController', function ($scope, SaveToGalleryService) {
$scope.savePhoto = function(photoUrl, folderName, fileName, callback) {
var fileName = new Date().getTime();
SaveToGalleryService.saveToGallery(photoUrl, "Kiddiz.me", fileName, function saveSuccess(res) {
console.log("Photo ", photoUrl, "photo saved", res);
if (callback) {
callback(true, res);
}
}, function saveFail () {
console.log("Photo ", photoUrl, "failed to save photo");
if (callback) {
callback(false);
}
});
}
});