这是我在Spring启动时的上传图片代码。
String root = ctx.getRealPath("/");
File dir = new File(root + File.separatorChar + "images");
if (!dir.exists())
dir.mkdir();
String path = dir.getAbsolutePath() + File.separatorChar
+ product.getProductName() + "."
+ file.getContentType().split("/")[1];
System.out.println(path);
File file1 = new File(path);
try {
FileOutputStream fod = new FileOutputStream(file1);
fod.write(file.getBytes());
fod.close();
product.setProductPicture("/images/" + product.getProductName()
+ "." + file.getContentType().split("/")[1]);
} catch (IOException e) {
e.printStackTrace();
}
上传文件工作正常,只有这个代码的问题是,当我使用ctx.getRealPath("/")
它返回临时位置时,当我重新启动弹簧启动应用程序时,我松开已经上传的已存在的文件,因为它创建了新的临时目录。
这会导致一些问题,因为我还必须在我的网站上显示此图片,现在它返回“图像未找到错误”
所以我需要一个解决方案,它允许我在永久位置上传文件并在浏览器上提供文件。
注意:我正在使用百里香的观点
答案 0 :(得分:5)
我找到了解决问题的方法。我创建了一个新函数,它只返回bytes[]
并作为响应体发送如下:
@RequestMapping(value = "image/{imageName}")
@ResponseBody
public byte[] getImage(@PathVariable(value = "imageName") String imageName) throws IOException {
File serverFile = new File("/home/user/uploads/" + imageName + ".jpg");
return Files.readAllBytes(serverFile.toPath());
}
并在html <img alt="Image" th:src="@{image/userprofile}" width="250" height="250"/>
答案 1 :(得分:0)
这是我的方法。
第1步:在项目目录中创建一个上载文件夹。
第2步:创建ResourceConfig文件
@Configuration
public class ResourceConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/uploads/**").addResourceLocations("file:uploads/");
}
}
第3步:添加您的html胸腺
<img th:src="@{'/uploads/' + ${someobject.someAttribute}}"/>
答案 2 :(得分:-1)
非常感谢。我必须这样做,但在我的数据库中有一个图像存储,如下所示:
@GetMapping("/muestra/{idproducto}")
@ResponseBody
public byte[] muestraImagen(Model model,
//id of the product i need to show the picture
@PathVariable("idproducto")Integer idproducto, HttpServletResponse response) {
//object from database
Productos producto = productosRepository.findByIdproducto(idproducto);
logger.info("sal imagen yo te invoco");
//return the attr of my object (blob)
return producto.getArchivo();
}
并在html中:
<img alt="Image" th:src="@{/tienda/productos/muestra/{id}(id=${producto.idproducto})}" width="250" height="250"/>