我正在尝试在数据库中保存文件。
这是我的代码。
public class DocumentForm {
@NotNull
@Size(min = 1)
private byte[] file;
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
}
...
}
控制器
@RequestMapping(value = "document", method = RequestMethod.POST)
public String signup(@Valid @ModelAttribute DocumentForm documentForm, Errors errors, RedirectAttributes ra) {
if (errors.hasErrors()) {
return "document/document";
}
Document d = projectRepository.save(documentForm.createDoc());
MessageHelper.addSuccessAttribute(ra, "document.success");
return "redirect:/";
}
视图
<input type="file" name="file" class="btn"></input>
<button type="submit" class="btn">Submit</button>
在数据库中:
它显示图像保存为BLOB
。
但是,当我尝试查看图像时,通过点击mySQL浏览器中的Open Value in Editor
,我看到的只是图像文件的名称。
如何在MySQL DB中保存图像?以及如何检索它并在我的视图上显示
答案 0 :(得分:0)
您可以使用可以保存表单数据的Part类来完成此操作
Part filePart = request.getPart(“image”);
inputStream = filePart.getInputStream();
statement.setBlob(1,inputStream);
答案 1 :(得分:0)
blob类型是一个二进制字段,它包含任何二进制数据的内容。由于MySql浏览器可能不知道blob的类型,所以它可以为您提供的是名称。数据应该都在那里。
那就是说,我认为你会发现通常图像不存储在数据库中,而是存储对磁盘上图像的引用。这是因为数据库对于大型二进制存储来说效率不高。
您可能希望存储在数据库中以便适当引用图像的内容:
如果您发现自己需要通过servlet容器(tomcat,jboss,w / e)传输图像,那么您可以通过创建流式html响应来实现。像这样的东西,其中InputStream是blob(二进制)数据的流:
public void serveInputStreamByResponse(HttpServletResponse response, InputStream in) {
try {
FileCopyUtils.copy(in, response.getOutputStream());
} catch (IOException e) {
// do something
} finally {
if (in != null) {
try {
in.close(); // very important
} catch (IOException e) {
// do something
}
}
}
}