WebOS: как проверить, существует ли файл?

Можно ли проверить, существует ли файл в WebOS, прежде чем продолжить загрузку с помощью службы диспетчера загрузок?

По умолчанию метод «загрузка» добавит подчеркивание + номер, чтобы избежать перезаписи, но я пытаюсь избежать загрузки файла, если он уже существует в локальной папке /media/internal/files...

Я просмотрел весь Интернет, но безрезультатно... Есть ключ? Спасибо!


person Pierlo Upitup    schedule 10.03.2011    source источник
comment
Я думаю, вы спрашиваете, потому что вы не получаете желаемую производительность. Но ОС действительно должна обрабатывать предоставление вам локального файла при доступе к тому же URL-адресу, независимо от локального переименования. Просто хотел сказать, что, по моему опыту, лучше не заниматься кэшированием или подобными вещами самостоятельно, а посмотреть, есть ли какая-то другая причина плохой производительности. Если URL не тот, то другое дело, конечно.   -  person Henrik Erlandsson    schedule 11.03.2011
comment
я не уверен, что понимаю ваш ответ. позвольте мне попытаться лучше объяснить, что я пытаюсь сделать: пользователь может слушать потоковый mp3-файл, если он ему нравится, он может нажать кнопку загрузки. Дело в том, что я хочу убедиться, что если файл с таким же именем файла уже существует в целевом каталоге, загрузка не произойдет, чтобы сохранить пропускную способность и предотвратить загрузку пользователем ранее загруженного файла...   -  person Pierlo Upitup    schedule 11.03.2011


Ответы (2)


Вероятно, самый простой способ — использовать Ajax-запрос, чтобы попытаться прочитать файл. http://forums.precentral.net/web-os-development/196320-how-parse-text-file-pres-file-system-into-app.html

Если вы не можете прочитать файл, значит, он еще не загружен.


Отредактировано, чтобы добавить следующее из примечаний к выпуску webOS 1.4:

Для Ajax.Request, если запрашиваемый файл не существует, запрос больше не получает "404", что считается ошибкой, а "0", что считается успешным. Вы потребуется изменить ваш код, чтобы найти транспортный статус 0 для файла, который не существует, или 200 для файла, который существует. Дополнительные сведения см. в документации Mozilla. Пример:

new Ajax.Request('/media/internal/my.file', {
    method: 'get',
    onSuccess: function(transport) {
        //This is new for 1.4, we have to check the status of 
        //the transport object to see if the file exists or not.
        if (transport.status == 200)
            Mojo.Log.info('200 = http ok, file exists')
        else if (transport.status == 0)
            Mojo.Log.info('0 = response was empty, file does not exist')
    },
    onFailure: function(transport) {
        Mojo.Log.info('In 1.3.5 if the file didn’t exist the request would return here')
    }
});
person Mark Bessey    schedule 11.03.2011
comment
я пробовал это, но по какой-то причине он всегда возвращает true ... ?! - person Pierlo Upitup; 11.03.2011
comment
(и недокументированный вызов palmGetResource только для текстовых файлов) - person Pierlo Upitup; 11.03.2011
comment
Странный. Я ожидал, что Ajax.request сработает. Я примерно на 80% уверен, что видел это раньше. Я проверю это, как только мой телефон завершит обновление программного обеспечения... - person Mark Bessey; 14.03.2011

Вы также можете создать частный сервис, использующий NodeJS.

http://nodejs.org/docs/v0.3.1/api/fs.html#fs.statSync

person Ivo    schedule 02.05.2011