SpringMVC ajax技术无刷新文件上传下载删除示例
参考
Spring MVC中上传文件实例
SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传
Spring MVC 文件上传下载 (FileOperateUtil.java 压缩,重命名工具类)
controller代码
@Controller
@RequestMapping(value = "/file")
public class FileController extends BaseController {
/**
* 上传文件
*
* @return JSON
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = "/upload")
public Message upload(HttpServletRequest request,
HttpServletResponse response) throws Exception {
logBefore(logger, "上传文件"); Message message = new Message();
PageData pd = new PageData();
pd = this.getPageData(); // 这里实现文件上传操作用的是commons.io.FileUtils类,它会自动判断/upload是否存在,不存在会自动创建
String realPath = request.getSession().getServletContext() .getRealPath("/upload/file");
logBefore(logger, "realPath: " + realPath); // 上传文件的原名(即上传前的文件名字)
String originalFilename = null;
// 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解
// 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且要指定@RequestParam注解
// 上传多个文件时,前台表单中的所有<input
// type="file"/>的name都应该是file,否则参数里的file无法获取到所有上传的文件
MultipartFile file = FileUpload.getMultipartFileByName(request, "file");
if (file.isEmpty()) {
message.response = ResponseStatus.FAILED.getStatus();
message.message = "请选择文件后上传!";
} else {
originalFilename = file.getOriginalFilename();
logBefore(logger, "文件原名: " + originalFilename);
logBefore(logger, "文件名称: " + file.getName());
logBefore(logger, "文件长度: " + file.getSize());
logBefore(logger, "文件类型: " + file.getContentType());
logBefore(logger, "========================================");
try {
// 这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
// 此处也可以使用Spring提供的MultipartFile.transferTo(File dest)方法实现文件的上传
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, originalFilename));
} catch (IOException e) {
logBefore(logger, "文件[" + originalFilename + "]上传失败,堆栈轨迹如下");
e.printStackTrace();
message.response = ResponseStatus.FAILED.getStatus();
message.message = "出错,服务器繁忙,请稍后再试。";
} }
//System.out.println(request.getContextPath() + "/upload/" + originalFilename);
message.response = ResponseStatus.SUCCESS.getStatus();
message.message = "上传成功!"; return message;
} /**
* 单条记录删除
*
* @return JSON
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = "/delete")
public Message delete() {
logBefore(logger, "删除文件");
PageData pd = new PageData();
Message message = new Message();
String file_id = (String) pd.get("file_id");
// 获取对应文件名和地址
String filePath = "";
//TODO:删除本地文件,删除数据库记录
try {
pd = this.getPageData();
AccidentService.delete(pd);
message.response = ResponseStatus.SUCCESS.getStatus();
message.message = "删除成功";
} catch (Exception e) {
logger.error(e.toString(), e);
message.response = ResponseStatus.FAILED.getStatus();
message.message = "出错,服务器繁忙,请稍后再试。";
}
return message;
} /**
* 获取数据列表页
*
* @param page
* 页面请求对象
* @return 跳转页面
*/
@RequestMapping(value = "/list")
public ModelAndView list(HttpServletRequest request, Page page) {
logBefore(logger, "列表File");
// if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
// //校验权限
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
//文件储存地址
//String realPath = request.getSession().getServletContext() .getRealPath("/upload/file");
//TODO:获取数据库文件信息
try {
pd = this.getPageData();
mv.setViewName("security/files/file_list");
mv.addObject(Const.SESSION_QX, this.getHC()); // 按钮权限
} catch (Exception e) {
logger.error(e.toString(), e);
}
return mv;
} /**
* 下载文件
*
* @param page
* 页面请求对象
* @return 跳转页面
* @throws IOException
*/
@RequestMapping(value = "/download")
public ResponseEntity<byte[]> download(HttpServletRequest request,
HttpServletResponse response, Page page) throws IOException {
logBefore(logger, "下载File");
PageData pd = new PageData();
String file_id = (String) pd.get("file_id");
// 获取对应文件名和地址
String fileName = "1.1.1关于印发《交运集团2016年安全生产工作意见》的通知.doc";
// fileName = "222";
String filePath = request.getServletContext().getRealPath(
"/upload/file")
+ "\\1.doc";
logBefore(logger, "fileName: " + fileName);
logBefore(logger, "filePath: " + filePath);
File file = new File(filePath);
try {
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");// 为了解决中文名称乱码问题
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} // 下载文件
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); try {
return new ResponseEntity<byte[]>(
FileUtils.readFileToByteArray(file), headers,
HttpStatus.CREATED);
} catch (IOException e) {
e.printStackTrace();
return null;
}
} }
其中一个FileUpload类的代码
package com.jiaoyun.util; import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver; /**
* 上传文件 创建人:James 创建时间:2014年12月23日
*
* @version
*/
public class FileUpload { /**
* @param file
* //文件对象
* @param filePath
* //上传路径
* @param fileName
* //文件名
* @return 文件名
*/
public static String fileUp(MultipartFile file, String filePath, String fileName) {
String extName = ""; // 扩展名格式:
try {
if (file.getOriginalFilename().lastIndexOf(".") >= 0) {
extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
}
copyFile(file.getInputStream(), filePath, fileName + extName).replaceAll("-", "");
} catch (IOException e) {
System.out.println(e);
}
return fileName + extName;
} /**
* 写文件到当前目录的upload目录中
*
* @param in
* @param fileName
* @throws IOException
*/
private static String copyFile(InputStream in, String dir, String realName) throws IOException {
File file = new File(dir, realName);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
System.out.println(file.getAbsolutePath());
FileUtils.copyInputStreamToFile(in, file);
return realName;
} /**
* @param request
* //requst请求
* @param filePath
* //上传路径
* @param fileName
* //文件名
* @return 文件名
* @throws IOException
* @throws IllegalStateException
*/
public static String upload(HttpServletRequest request, String filePath, String fileName)
throws IllegalStateException, IOException {
String extName = ""; // 扩展名格式:
String path = "";
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
// 取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if (file != null) {
// 取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
// 如果名称不为“”,说明该文件存在,否则说明该文件不存在
if (myFileName.trim() != "") {
// 重命名上传后的文件名
if (file.getOriginalFilename().lastIndexOf(".") >= 0) {
extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
}
// 定义上传路径
path = filePath + "/" + fileName + extName;
// System.out.println("---------------------");
// System.out.println(path);
// System.out.println("---------------------");
File localFile = new File(path);
file.transferTo(localFile);
}
}
} }
return extName;
} /**
* @param request
* //requst请求
* @param filePath
* //上传路径
* @param fileName
* //文件名
* @return 文件名
* @throws IOException
* @throws IllegalStateException
*/
public static String[] uploadMultiple(HttpServletRequest request, String filePath, String[] fileName)
throws IllegalStateException, IOException {
String[] extName = new String[fileName.length]; // 扩展名格式:
String path = "";
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
int i = 0;
while (iter.hasNext()) {
// 取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if (file != null) {
// 取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
// 如果名称不为“”,说明该文件存在,否则说明该文件不存在
if (myFileName.trim() != "") {
// 重命名上传后的文件名
if (file.getOriginalFilename().lastIndexOf(".") >= 0) {
extName[i] = file.getOriginalFilename()
.substring(file.getOriginalFilename().lastIndexOf("."));
}
// 定义上传路径
fileName[i] = fileName[i].replace(extName[i], "");
path = filePath + "/" + fileName[i] + extName[i];
// path = fileName[i] + extName[i];
File localFile = new File(path);
file.transferTo(localFile);
System.out.println(localFile.getAbsolutePath());
}
}
i++;
} }
return extName;
} /**
* 从request那里得到所有MultipartFile
*/
public static List<MultipartFile> getMultipartFileFromRequest(HttpServletRequest request)
throws IllegalStateException, IOException { List<MultipartFile> fileList = new ArrayList<MultipartFile>();
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
MultipartFile file = multiRequest.getFile(iter.next());
System.out.println(file.getName()+"11111111111");
if (file != null && file.getSize() > 0) {
fileList.add(file);
}
}
}
return fileList;
}
/**
* @Description:删除文件
*/
public static void deleteFile(String bucketName, String key) {
return;
}
public static void deleteFile(String bucketName) {
return;
} /**
* 从request那里得到所有MultipartFile
*/
public static MultipartFile getMultipartFileByName(HttpServletRequest request,String name)
throws Exception {
MultipartFile file=null;
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
file = multiRequest.getFile(iter.next());
if (file != null&&file.getName().equals(name)) {
return file;
}
}
}
return file;
} /**
* 根据文件得到后缀名
* @param file
* @return
*/
public static String getExtNameByString(String file){
String extName="";
if (file.lastIndexOf(".") >= 0){
extName = file.substring(file.lastIndexOf("."));
}
return extName;
} public static String getExtName(MultipartFile file){
String extName="";
if (file.getOriginalFilename().lastIndexOf(".") >= 0){
extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
}
return extName;
} }
html前台页面代码
上传按钮
<a class="btn red btn-circle btn-sm"
href="javascript:importData('file/upload');"> 上传文件 <i
class="fa fa-upload"></i>
</a>
<script>
function importData(url) {
dialog = bootbox.confirm({
title : '请选择文件',
message : '<form id="uploadFileForm" class="form-horizontal"><input type="file" name="file" value="选择文件" id="uploadFileInput" class="btn sbold green"/></form>',
buttons: {
confirm: {
label: '上传',
className: 'btn-success'
},
cancel: {
label: '取消',
className: 'btn-danger'
}
},
callback: function (result) {
if(result){
var formData = new FormData($( "#uploadFileForm" )[0]);
$.ajax({
type: "POST",
url: url,
data: formData,
dataType:'json',
async: false,
cache: false,
contentType: false, //必须false才会自动加上正确的Content-Type
processData: false, //必须false才会避开jQuery对 formdata 的默认处理
error: function(request) {
bootbox.alert("网络异常");
},
success: function(data){
if (data.response == 'true') {
bootbox.alert("上传成功!");
$table.bootstrapTable('refresh');
dialog.modal('hide');
} else {
bootbox.alert(data.message);
}
}
});
}
}
});
}
</script>
下载按钮
<a class="btn default" id="demo_1"
href="file/download?file_id=1" target="_blank"> 下载文件 <i
class="fa fa-download"></i>
</a>
删除按钮
<a class="btn red" id="demo_1" href="file/delete?file_id=1"> 删除文件 <i class="fa fa-remove"></i>
</a>
SpringMVC ajax技术无刷新文件上传下载删除示例的更多相关文章
- 【JS】ajax 实现无刷新文件上传
一.摘要 最近在做个东西,需要实现页面无刷新文件上传,目前看到的方法有两种 1) 通过隐藏iframe 实现页面无刷新,适用于不关心上传结果 <form target="hiddenF ...
- 基于jQuery Ajax实现无刷新文件上传
最近因项目需求更改,需要实现选择文件后即时上传至服务器,然后提交后,加载xls表格内容到jqgrid表格中,文件上传功能实现示例: 前端jsp页面: <form id="uploadF ...
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)
Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认”拿来主义“,只是我个人更喜欢凡是求个所以 ...
- 使用PHP和HTML5 FormData实现无刷新文件上传教程
无刷新文件上传是一个常见而又有点复杂的问题,常见的解决方案是构造 iframe 方式实现. 在 HTML5 中提供了一个 FormData 对象 API,通过 FormData 可以方便地构造一个表单 ...
- 实用ExtJS教程100例-009:ExtJS Form无刷新文件上传
文件上传在Web程序开发中必不可少,ExtJS Form中有一个filefield字段,用来选择文件并上传.今天我们来演示一下如何通过filefield实现ExtJS Form无刷新的文件上传. 首先 ...
- ie8实现无刷新文件上传
ie8由于无法使用FormData,想要无刷新上传文件就显得比较麻烦.这里推荐使用jQuery-File-Upload插件,它能够很方便的解决ie8无刷新文件上传问题.(最低兼容到ie6) jQuer ...
- SpringMVC(三) RESTful架构和文件上传下载
RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
随机推荐
- BZOJ 4540 [Hnoi2016]序列 (单调栈 + ST表 + 莫队算法)
题目链接 BZOJ4540 考虑莫队算法. 这题难在$[l, r]$到$[l, r+1]$的转移. 根据莫队算法的原理,这个时候答案应该加上 $cal(l, r+1) + cal(l+1, r+1) ...
- "从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
#事故现场 在一个asp.net 的项目中,前端通过ajax将富文本中的文字内容post到服务端的一个ashx中,在ashx中尝试读取参数值时, 结果报错:“从客户端中检测到有潜在危险的 Reques ...
- 通过房价预测入门Kaggle
今天看了个新闻,说是中国社会科学院城市发展与环境研究所及社会科学文献出版社共同发布<房地产蓝皮书:中国房地产发展报告No.16(2019)>指出房价上涨7.6%,看得我都坐不住了,这房价上 ...
- android添加桌面悬浮窗
1. 添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 2. ...
- Android 中的Canvas画图
Android中有一个Canvas类,Canvas类就是表示一块画布,你可以在上面画你想画的东西.当然,你还可以设置画布的属性,如画布的颜色/尺寸等.Canvas提供了如下一些方法: Canvas() ...
- android权限大全转http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html
android权限大全转http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html 访问登记属性 android.permission ...
- python 使用cx-freeze打包程序
python环境 3.6.5 win7 linux环境同理 先尝试了PyInstaller ,打包时一直提示 no module named gtk 而gtk 又依赖pygobj ...
- 怎样用命令行管理SharePoint Feature?
普通情况下对IT管理者来说.在SharePoint Farm中维护Feature,更喜欢使用命令行实现,这样能够省去登录到详细网站的操作. 比方IT接到end user的一个需求,要开启Site Co ...
- iOS上如何让按钮(UIbutton)文本左对齐展示
// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = U ...
- 【Python】输出程序运行的百分比
对于一些大型的Python程序.我们须要在命令行输出其百分比,显得更加友好,以免被人误会程序陷入死循环.假死的窗口. 关键是利用到不换行的输出符\r,\r的输出.将直接覆盖掉此行的内容. 比方例如以下 ...