Мы выводим сетевой файл в приложении jmix в браузере посредством browserframe. На клиенте этот файл кэшируется браузером и при обновлении файла на сервере, пользователь видит закэшированную версию. Какую опцию надо задать в browserframe, чтобы браузер на клиенте не кэшировал его содержимое?
Добрый день.
Я бы посоветовал устанавливать ресурс для BrowserFrame
программно и добавлять доп. параметр к ссылке, чтобы заставлять браузер загружать новую версию, например добавлять текущее время:
browserFrame.setSource(ThemeResource.class)
.setPath("files/browserframe-theme.html?var=" + timeSource.currentTimeMillis());
В таком случае, при каждом открытии экрана, должна загружаться свежая версия.
С уважением,
Глеб
Да, мы думали об этом, но в таком случае будет создаваться очень много файлов и хранилище забьётся.
Может есть какой-то другой вариант?
Это нужно не к физическому файлу добавлять, а к url на файл. Т.к. с точки зрения браузера, это будет новая ссылка, то кэширования не будет
Мы хотим получить ссылку на файл, лежащий на сетевом диске, и пишем
String filePath = getFileName();
var reportFile = new File(filePath);
if(!reportFile.exists()){
log.warn(“File not found”);
reportFrame.setAlternateText(“Файл не найден”);
return;
}
reportFrame.setSource(FileSource.class).setFile(reportFile);
(reportFrame это BrowserFrame)
Возможно в нашем случае стоит использовать setCacheTime()?
Подскажите пожалуйста, как правильно это сделать
Здесь возможно опечатка, т.к. у нас нет FileSource
, но есть FileResource
. При таком задании ресурса для browserFrame, у меня не получилось воспроизвести проблему с кэшированием файла, т.к. url формируется каждый раз разный, например:
Предположим у меня есть файл за пределами приложения и я получаю его по абсолютному пути
String filePath = "/Users/gorelov/Downloads/browserframe-theme.html";
File file = new File(filePath);
if (!file.exists()) {
return;
}
browserFrame.setSource(FileResource.class)
.setFile(file);
При первом открытии экрана ссылка на файл получается следующая:
<iframe src="http://localhost:8080/vaadinServlet/APP/connector/0/54/source/browserframe-theme.html" ></iframe>
После переоткрытия экрана уже другая:
<iframe src="http://localhost:8080/vaadinServlet/APP/connector/0/62/source/browserframe-theme.html" ></iframe>
Т.к. ссылка разная, то и кэширования нет.
К сожалению, у меня нет сетевого диска для тестов.
Глеб
Действительно, ссылки разные, если открывать их в рамках одной сессии.
Но если перезапустить приложение, то ссылки пойдут те же самые, по второму кругу, и будут открываться закэшированные файлы, которые были в первой сессии.
А как формируются вот эти разные числа в ссылках: 54 и 62?
Это внутренняя логика Ваадина. К сожалению у меня не вышло воспроизвести проблему с кэшем файла.
Глеб