У меня есть веб-приложение 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 и т. д.)
Можно сделать несколько??
Я прочитал прямо здесь, в старом сообщении, что файл можно открыть на новой вкладке _blank (или на странице без разницы) следующим образом:
<h4><a href="@document.ContentBlobURL" target="_blank">@document.Name</a></h4>
примерно то что я хочу. Теперь автор пишет, что этот атрибут:
@document.ContentBlobURL
представляет адрес хранилища BLOB-объектов в БД. Есть кто знает что это?? Как я могу получить это значение?
Я много гуглил, но ничего интересного не нашел.
Я хотел бы указать, что, как вы знаете, в приложении SpringBoot (например) с этой структурой:
если я сохраню файл на диске, например, внутри статической папки, я могу открыть его:
http://localhost:8080/costruzione_stampi.pdf
Хотелось бы тоже самое но без сохранения файлов на диск..
Надеюсь кто-нибудь ответит..