springboot项目上传图片,保存到
D:\upload\image\img_picture\
目录下,同时想要在项目中展示此图片,通过如下链接
·http://localhost:8080/项目名/images/图片名称·
这种方式展示,这要怎么做呢?
首先,我们现在application.yml中配置一下
file: staticAccessPath: /images/** uploadFolder: D:\lenglian\upload\image\img_picture\ staticStorePath: /storeImages/** storePath: D:\lenglian\upload\image\store\ img: url: http://localhost:8080/项目名/images/
其次,我们要写一个文件上传的类
@Component @Configuration @ConfigurationProperties(prefix="file") public class UploadFilePathConfig implements WebMvcConfigurer { @Value("${server.port}") private String port; @Value("${file.staticAccessPath}") private String staticAccessPath; @Value("${file.uploadFolder}") private String uploadFolder; @Value("${file.staticStorePath}") private String staticStorePath; @Value("${file.storePath}") private String storePath; /** * 重写这个方法即可配置虚拟路径 * registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder); registry.addResourceHandler(staticStorePath).addResourceLocations("file:" + storePath); } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getStaticAccessPath() { return staticAccessPath; } public void setStaticAccessPath(String staticAccessPath) { this.staticAccessPath = staticAccessPath; } public String getUploadFolder() { return uploadFolder; } public void setUploadFolder(String uploadFolder) { this.uploadFolder = uploadFolder; } }
下面是具体使用,代码
页面代码 <form class="form-horizontal" id="myform" enctype="multipart/form-data"> ...//如果有其他要携带的参数,可以用input标签添加 <input id="testImg1" name="testImg1" type="file" > <input type="button" class="btn btn-primary" id="btnSaveOrUpdate" data-loading-text="保存中..." @click="saveOrUpdate" value="确定"/> </form> js代码 saveOrUpdate: function (event) { var form = new FormData(document.getElementById("myform")); $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function() { var url = "business/nat/save"; $.ajax({ type: "POST", url: baseURL + url, dataType:'json', contentType: false, // 关关关!必须得 false processData: false, // 关关关!重点 async:false, //data : $('#from-pro').serialize(), //包含文件时,后台无法接收会报错 data : form, success: function(r){ if(r.code === 0){ layer.msg("操作成功", {icon: 1}); }else{ layer.alert(r.msg); } } }); }); }
后台代码controller
这里只列出如何接收参数
@RequestMapping("/save") public R save(NatEntity nat,@RequestParam(value="testImg1",required=false) MultipartFile testImg1){ //业务代码xxxx }
service层代码
@Service("natService") public class NatServiceImpl extends ServiceImpl<NatDao, NatEntity> implements NatService { @Autowired private UploadFilePathConfig uploadFilePathConfig; @Value("${img.url}")private String imgurl; @Override @Transactional(rollbackFor = Exception.class) public R saveInfo(NatEntity nat, MultipartFile testImg1) { SysUserEntity userEntity = ShiroUtils.getUserEntity(); String url2 = ""; if (null != testImg1 && !"".equals(testImg1.getOriginalFilename())) { // 物理路径(跟项目平级) String filename2 = testImg1.getOriginalFilename(); String prefix2 = filename2.substring(filename2.lastIndexOf(".") + 1).toUpperCase(); String reString2 = yanzheng(testImg1, prefix2); if (!"".equals(reString2)) { return R.error(reString2); } // 保存图片信息 url2 = UUIdUtil.getUUid() + "." + prefix2; try { FileUtils.writeByteArrayToFile(new File(uploadFilePathConfig.getUploadFolder()+url2), testImg1.getBytes()); nat.setNatUrl(imgurl+url2); } catch (IOException e) { logger.error("图片上传失败",e); throw new RRException("图片上传失败"); } } this.save(nat); return R.ok(); } }
如上就可以将图片保存到我们指定的磁盘中,在项目中展示的时候只要直接取出naturl来就可以展示了
本文暂时没有评论,来添加一个吧(●'◡'●)