Spring Boot +Bootstrap 图片上传与下载,以及在bootstrap-table中的显示
2024-09-06 02:55:24
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;
}
以上。
最新文章
- Stream与byte[]与Image与string
- 370. Range Addition
- [No000066]python各种类型转换-int,str,char,float,ord,hex,oct等
- Tomcat 6 JNDI数据源详解
- 使用 gulp 搭建前端环境入门篇(转载)
- Android—SQLITE数据库的设计和升降级
- ASP.NET发布网站遇到的几个问题
- 生成ssl证书
- EOF的一点注记
- Wpf自定义路由事件
- python成长之路第三篇(2)_正则表达式
- 利用python进行数据分析之绘图和可视化
- asp 随机生成字符
- VUE2.0实现购物车和地址选配功能学习第四节
- java oop 集合框架
- 未能加载文件或程序集“SuperMap.Mapping, Version=7.0.0.0, Culture=neutral, PublicKeyToken=0635c574ea890381”或它的某一个依赖项。试图加载格式不正确的程序。
- Android-简单总结一下图片压缩
- .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(二)
- assert BOOST_ASSERT的坑
- vuejs服务端渲染更好的SEO,SSR完全指南Nuxt.js静态站生成器
热门文章
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
- Think in Speed (关于速度的一点思考)
- 反射实体类拼接SQL语句
- Netty与RPC
- Docker关于镜像、容器的基本命令
- SAP MM MB5L 报表里的差异金额如何调整?
- [b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event
- [b0020] python 归纳 (六)_模块变量作用域
- mysql综合性练习
- DOS(磁盘操作系统)基本命令-思维导图