1.前台上传:
<input type="file" name="file" id="file">
2.后台的接收与处理:
String uuid = UUID.randomUUID().toString(); //取得文件 MultipartFile file = form.getFile(); //获取存放文件的路径 File fileDir = UploadUtils.getImgDirFile(); try { //构建新文件,包含路径+文件名 File newFile = new File(fileDir.getAbsolutePath(), uuid); //保存文件 file.transferTo(newFile); } catch (IOException e) { e.printStackTrace(); }
这里放一下我上面构建存放文件路径的工具类 UploadUtils :
public class UploadUtils { /* // 项目根路径下的目录 -- SpringBoot static 目录相当于是根路径下(SpringBoot 默认) public final static String IMG_PATH_PREFIX = "static/upload/imgs";*/ public static File getImgDirFile(){ // 构建上传文件的存放 "文件夹" 路径 String fileDirPath = new String("C:\webImg"); File fileDir = new File(fileDirPath); if(!fileDir.exists()){ // 递归生成文件夹 fileDir.mkdirs(); } return fileDir; } }
保存图片后的文件夹:
3.做完保存,接下来就得让它在前台显示出来,这里使用的容器是bootstrap-table,代码如下:
<table id="gamesTable" data-bind="bootstrapTable:$root" style="table-layout: fixed;"> <thead> <tr> <th data-checkbox="true"></th> <th data-field="img" data-formatter="showImg">概念图</th> <th data-field="name">名称</th> <th data-field="dev">开发商</th> <th data-field="shelfTime">发行日期</th> <th data-field="price">价格</th> </tr> </thead> </table>
JS处理data-formatter:
function showImg(value){ var html="<img src='games/dw?uuid="+value+"' width='100%' />"; return html; }
后台的下载方法:
public void dw(String uuid,HttpServletRequest request, HttpServletResponse response) { Games fileentity = dao.findByImg(uuid); if(fileentity==null) { }else { //文件名称 String filename = "sss.jpg"; filename = getStr(request, filename); //下载文件的路径(即保存文件的路径 String filePath="C:\webImg"; File file = new File(filePath, uuid); if(file.exists()) { FileInputStream fis; try { fis = new FileInputStream(file); response.setContentType("application/x-msdownload"); response.addHeader("Content-Disposition", "attachment; filename=" + filename ); ServletOutputStream out = response.getOutputStream(); byte[] buf=new byte[2048]; int n=0; while((n=fis.read(buf))!=-1){ out.write(buf, 0, n); } fis.close(); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }
附上处理文件名乱码的方法:
//处理文件名乱码的问题 private String getStr(HttpServletRequest request, String fileName) { String downloadFileName = null; //仅提供了部分代码,因为我们已经明确问题的所在,知道修改那一部分了,(代码中downloadFileName 即代表 *=utf-8'zh_cn'文件名.xx部分) String agent = request.getHeader("USER-AGENT"); try { if(agent != null && agent.toLowerCase().indexOf("firefox") > 0){ //downloadFileName = "=?UTF-8?B?" + (new String(Base64Utils.encode(fileName.getBytes("UTF-8")))) + "?="; //设置字符集 downloadFileName = "=?UTF-8?B?" + Base64Utils.encodeToString(fileName.getBytes("UTF-8")) + "?="; }else{ downloadFileName = java.net.URLEncoder.encode(fileName, "UTF-8"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return downloadFileName; }
以上。