У меня есть простая форма с 2 текста и 1 файл вводаPlay: Как предотвратить 404 на изображение ЦСИ по первому требованию после загрузки
@helper.form(action = routes.CharactersController.newCharacter(), 'enctype -> "multipart/form-data") {
@helper.inputText(field = characterForm("characterName"))
@helper.inputText(field = characterForm("characterRealName"))
@helper.inputFile(field = characterForm("characterImage"))
<p>
<input type="submit">
</p>
}
в действии newCharacter переместить файл в папку активов ,
Http.MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart<File> picture = body.getFile("characterImage");
File file = picture.getFile();
file.renameTo(new File(LinkUtil.getCharacterUploadPath(), imageName + ".jpg"));
, а затем сделать редирект на/показать страницу, чтобы отобразить новый введенный символ
return redirect(routes.CharactersController.show(character.id, OrderType.MAIN.name()));
на вновь загруженной странице я получаю только разбитое изображение и увидеть 404 в консоли для образ. Когда я перезагружаю страницу, изображение отображается как ожидалось.
Итак, какая часть не готова при перенаправлении? Является ли это переименованием или действительно нужно какое-то время, чтобы найти новый актив? И как я могу обеспечить, чтобы все было готово до перенаправления?
Edit: Чтобы улучшить мой вопрос
Я использую играть 2.5
LinkUtil.getCharacterUploadPath() решает "общественные/изображения/символы /"
Я встраивание изображение в моем шоу-шаблон:
<img src="@character.getImagePath">
, который затем решает в «/assets/images/characters/imagename.jpg»
Edit 2: Дальнейшие исследования:
При проверке файловой системы в действии newCharacter с чем-то вроде File.Exists() для нового пути, я правда. Таким образом, переименование/перемещение частично завершено. Однако, если я пытаюсь получить ресурс с помощью среды
environment.getResource("relativePathToFile");
это нуль. Даже в цикле while ресурс остается равным нулю. Кажется, это указывает на то, что файл еще не добавлен в classpath. К сожалению, независимо от того, как долго я остаюсь в действии, ресурс всегда равен нулю. Но когда я помещаю Thread в режим сна за 2000 мс, а затем снова проверяю ресурс в действии шоу, он правильно решается. Но только если я жду 2 секунды.
Еще один тест заключался в использовании onerror = "window.location.reload()" на изображении. Это приводит к примерно 5-10 перезагрузкам до того, как изображение будет найдено.
Таким образом, это определенно вопрос времени, но включение Thread для сна на произвольную сумму кажется несправедливым. Должен быть способ убедиться, что файл доступен в пути к классам.
Каждый намек/идея оценивается.