2016-06-14 6 views
1

Я создаю приложение на основе PhoneGap для платформы iOS.
Я хочу загрузить несколько файлов изображений в конкретный каталог.PhoneGap скачать изображение в определенную папку

Я хочу, чтобы сохранить загруженные файлы в папке www/my_img/

Так что в моем приложении я могу дополнительно использовать это изображение:

<img src="my_img/downloaded.jpg" width="100px" height="100px"> 

Я использую PhoneGap плагин для загрузки изображений:

var url = 'http://myServer.com/img.jpg'; 
var filePath = 'www/my_img/'; 
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: { 
     } 
    } 
); 

Но проблема в том, что изображение не сохраняется в указанной папке.
Как сохранить загруженное изображение в папке «www/my_img /»?

ответ

1

Проблема в значении для filePath. Это должно быть device-absolute-file-path или файловой системы URL.

Посмотрите на comptibility notes part of the docs:

Есть некоторые заранее определенные папки, которые вы можете использовать. Я думаю, наиболее подходящий для вашего случая (это г/ш, без необходимости устанавливать какие-либо разрешения и является постоянной) является:

cordova.file.dataDirectory 

Вы можете сохранить загруженный файл там и, когда сделано, установите СРК изображения ,

Переводя это ваш случай:

HTML

<img id="downloadedimage" width="100px" height="100px"> 

JS

var url = 'http://myServer.com/img.jpg'; 
var filePath = cordova.file.dataDirectory + '/img.png'; 
var fileTransfer = new FileTransfer(); 
var uri = encodeURI(url); 

fileTransfer.download(
    uri, 
    filePath, 
    function(entry) { 
     console.log("download complete: " + entry.fullPath); 
     document.getElementById("downloadedimage").src = entry.toURL(); 
    }, 
    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: { 
     } 
    } 
); 
+0

Итак, 'cordova.file.applicationStorageDirectory' +' Documents' на iOS даст мне папку для чтения/записи файлов. Кроме того, «cordova.file.dataDirectory» будет таким же? является ли эта переменная доступной напрямую или нужно написать код, чтобы получить путь, упомянутый @Zappescu в его ответе? который еще более надежный? – User7723337

+0

Я обновил ответ на примере. Надеюсь, поможет. –

+0

Спасибо за подробную информацию. Если папка, которую я хочу сохранить, не существует, значит, она будет создана? или сначала мне нужно создать новую папку под 'cordova.file.dataDirectory', а затем сохранить ее? – User7723337

1

Я думаю, вам нужно, прежде чем получить доступ к файловой системе. Когда все в порядке, вы можете загрузить изображение в папке, созданной в каталоге, доступ к которому вы получили. Если вам нужно, я могу дать вам фрагмент.

EDIT:

1) доступ к файловой системе:

function onDeviceReady() { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSCategory, fail); 
} 

2), если файловая система есть, получить главный реж:

function gotFSCategory(fileSystem) { 
    window.fileSystem = fileSystem; 
    fileSystem.root.getDirectory(window.appRootDirName, { 
     create : true, 
     exclusive : false 
    }, dirReadyCategory, fail); 
} 

3), когда основной реж готов, сохранить его и далее:

function dirReadyCategory(entry) { 
    window.appRootDir = entry; 
    console.log('application dir is ready with window.appRootDir: '+JSON.stringify(window.appRootDir)); 
    // Start my code: 
    start_my_code(); 
} 

Что касается Filepath вар, я использую этот один (по одному для каждого файла):

var filePath = window.appRootDir.toURL() + fileName; 
+0

Спасибо за повтор, как я могу получить доступ к файловой системе. В моем случае каталог, в котором я буду сохранять изображение, будет существовать в папке www. Мне просто нужно установить путь к этому каталогу, не так ли? фрагмент поможет много. – User7723337

+0

Спасибо за фрагмент кода, но мне нужно пройти этот процесс вызовов методов, чтобы получить Путь, или я могу использовать 'cordova.file.applicationStorageDirectory', как упомянуто @Philip Bijker в его ответе? – User7723337

+0

Я раньше не использовал предложение @Philip, могу сказать, что я использую свой код в своих приложениях для Android/iOS/Win без известных проблем. – Zappescu

Смежные вопросы