Найти картинку в кэше?
Добрый день!
Просмотрел пример с использованием Policy для фильтрации объектов, там в принципе делается то, что нужно, но не совсем.
Нужно составить список jpeg-имаджей на странице с определенными метаданными(типа экзифа).
Для этого надо открывать реальный(существующий) файл и читать оттуда метаданные, это делает уже готовая длл.
Но не хотелось бы дважды скачивать большие имаджи (некоторые фотки могут быть размером более мегабайта).
Вопрос первый, при первоначальном заполнении списка в Policy имаджи уже находятся в кэше? Как тогда получить path на файл в кэше, имея url? Может быть использовать для этого ImageLoadingContent?
Если же имадж еще на скачан, как можно заставить его сначала скачаться, чтобы потом опять же получить path файла из кэша, открыть файл и прочитать данные(так чтобы при отрисовке страницы он не скачивался заново)?
Если воспользоваться кэшем ФаерФокса не судьба, можно ли сделать так, чтобы скачивался не весь имадж, а например первый килобайт?(этого достаточно для решения задачи).
Если нельзя - придется значит на си писать дополнительный код и включать в длл, в принципе ничего страшного, просто надо выбрать оптимальное решение.
var listener = {
QueryInterface: function(iid)
{
if (iid.equals(Components.interfaces.nsICacheListener) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onCacheEntryAvailable: function(descriptor, mode, status)
{
if (descriptor.isStreamBased())
{
var istream = descriptor.openInputStream(0);
// Do something with file.
// ...
istream.close();
}
}
};
var session = Components
.classes["@mozilla.org/network/cache-service;1"]
.getService(Components.interfaces.nsICacheService);
.createSession("HTTP", 0, true);
session.asyncOpenCacheEntry(url, Components.interfaces.nsICache.ACCESS_READ, listener);
![[logo]](/site/images/logo.jpg)