У меня есть веб-приложение SpringBoot 2.1.3 + Thymeleaf 3.У меня есть большая форма с некоторой информацией, а также загрузка файла.Загрузка файла работает хорошо, но когда я хочу перезагрузить в ту же форму (для детализации или изменения цели) информацию, хранящуюся в БД, все работает хорошо, за исключением части, связанной с файлами.
Код, дляЧасть загрузки файла, является следующим:
<div class="form-group row">
<label for="allegato_durc" class="col-sm-5 col-form-label form-label">Allegato DURC</label>
<div class="col-sm-7">
<input type="file" th:field="*{documentiFornitoreDto.allegato_DURC}" class="form-control-file form-control-sm datif_input" id="allegato_durc">
</div>
<label for="allegato_CCIAA" class="col-sm-5 col-form-label form-label">Allegato CCIAA</label>
<div class="col-sm-7">
<input type="file" th:field="*{documentiFornitoreDto.allegato_CCIAA}" class="form-control-file form-control-sm datif_input" id="allegato_CCIAA">
</div>
</div>
Даже если файл присутствует, я вижу поле ввода пустым, как показано ниже:
Я сохраняю MultipartFile как MediumBlob в БД и, когда я перезагружаю информацию из БД, я перестраиваю MultipartFile следующим образом:
public class ByteToMultipartFile implements MultipartFile {
private byte[] fileContent;
private String fileName;
public ByteToMultipartFile(String fileName, byte[] fileContent) {
this.fileContent = fileContent;
this.fileName = fileName;
}
@Override
public String getName() {
return fileName;
}
@Override
public String getOriginalFilename() {
return fileName;
}
@Override
public String getContentType() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isEmpty() {
if (fileContent.length > 0) return false;
else return true;
}
@Override
public long getSize() {
return fileContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return fileContent;
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(fileContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
// TODO Auto-generated method stub
}
}
Может быть, что-то не так с классом выше ??
В любом случае, я бы хотел выполнить 2 вещи:
1) Показать имя файла рядом с кнопкой «Выбрать» ( Файл Scegli на изображении), если присутствует
2) Показать кнопку, которая позволяет пользователю ОТКРЫТЬ файл в надлежащем приложении Windows (если это PDF-файл, открыть его с помощью Acrobat Reader и т. Д.)
Можно сделать некоторые ??
Я прочитал прямо здесь, в старый пост, thфайл может быть открыт в новой вкладке _blank (или страница не имеет значения) следующим образом:
<h4><a href="@document.ContentBlobURL" target="_blank">@document.Name</a></h4>
, это примерно то, что я хочу.Теперь автор пишет, что этот атрибут:
@document.ContentBlobURL
представляет адрес хранилища BLOB-объектов БД.Есть кто-то, кто знает, что это такое?Как я могу получить это значение?
Я много гуглял, но не смог найти ничего интересного.
Я хотел бы отметить, что, как вы знаете, в приложении SpringBoot (дляпример) с такой структурой:
если я сохраню файл на диске, например внутри статической папки, я могу открыть его с помощью:
http://localhost:8080/costruzione_stampi.pdf
Мне бы хотелось того же, но без сохранения файлов на диске ..
Надеюсь, кто-то ответит ..