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;
}

以上。

Spring Boot +Bootstrap 图片上传与下载,以及在bootstrap-table中的显示的更多相关文章

  1. Spring Boot入门——文件上传与下载

    1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  2. 基于Spring Boot的图片上传

    package com.clou.inteface.domain.web.user; import java.io.File; import java.io.IOException; import j ...

  3. spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)

    一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...

  4. Spring Boot 在接收上传文件时,文件过大异常处理问题

    Spring Boot 在接收上传文件时,文件过大时,或者请求过大,spring内部处理都会抛出异常,并且捕获不到. 虽然可以通过调节配置,增大 请求的限制值. 但是还是不太方便. 之所以捕获不到异常 ...

  5. Java Web 学习(8) —— Spring MVC 之文件上传与下载

    Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...

  6. [python][flask] Flask 图片上传与下载例子(支持漂亮的拖拽上传)

    目录 1.效果预览 2.新增逻辑概览 3.tuchuang.py 逻辑介绍 3.1 图片上传 3.2 图片合法检查 3.3 图片下载 4.__init__.py 逻辑介绍 5.upload.html ...

  7. Spring Boot 教程 - 文件上传下载

    在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到.此次我们不讲如 ...

  8. Spring MVC的文件上传和下载

    简介: Spring MVC为文件上传提供了直接的支持,这种支持使用即插即用的MultipartResolver实现的.Spring MVC 使用Apache Commons FileUpload技术 ...

  9. 【Spring Boot】关于上传文件例子的剖析

    目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改 ...

随机推荐

  1. win7和win10自带桌面便签哪里找

    一些小伙伴习惯使用windows自带的便签功能,但win7和win10区别较大, 导致更新系统后不知道在哪里找,甚至以为没有该功能了, 其实不然,下面我总结了2种方法,希望能帮到有需要的人 win7( ...

  2. javascript检索某个字符或字符串在源字符串中的位置(下标)

    indexOf()方法 JavaScript中的String对象提供了一个indexOf(searchValue, fromIndex)方法用于检索某个字符或字符串在源字符串中第一次出现的位置(下标) ...

  3. Java泛型类型擦除与运行时类型获取

    Java的泛型大家都知道是类型擦除的方式实现的,“编译器会进行泛型擦除”是一个常识了(实际擦除的是参数和自变量的类型).“类型擦除” 并非像许多开发者认为的那样,在 <..> 符号内的东西 ...

  4. oracle学习笔记(十三) 查询练习(三) 子查询查询

    子查询练习 create table empployee_demo( empno number(4) not null primary key, --员工编号,主键 ename varchar2(10 ...

  5. WCF通信简单学习实例

    最近在学习WCF通信,自己简单做个实例分享一下,环境是VS2015,使用的项目都是WPF的项目,其实大家用Winform或者Web项目也可以,都可以用的. 一.服务器端 1.创建WCF服务 服务名为W ...

  6. ZooKeeper安装、配置和使用

    Zookeeper的概述: ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, ...

  7. oracle 利用序列与触发器实现列自增

    实现步骤:先创建序列,后创建触发器 1.创建序列 create sequence 序列名 increment start maxvalue ; 2.创建触发器 create or replace tr ...

  8. async/await简单使用

    function process(i) { var p = new Promise(function(resolve,reject){ setTimeout(function(){ console.l ...

  9. JS的with关键字到底是什么?

    with关键字 with在JS中通常被当做重复引用同一个对象多个属性的快捷方式. var obj = { a: 1, b: 2, c: 3 }; // 重复引用obj进行属性赋值 obj.a = 3; ...

  10. MySQL Linux环境的安装配置

    在Kali中已经内置了MySQL(镜像可以从mysql.com/downloads/ 下载安装) 奇怪的是博主我的kali内置的是mariaDB数据库,所以我也懒得弄MySQL了!直接mariaDB吧 ...