Spring实现文件的上传与下载
文件上传可以使用FormData
前端实现代码:使用表单进行提交
<form class="form-horizontal" method="post" id="uploadFileForm" enctype="multipart/form-data" onkeydown="if(event.keyCode==13){return false;}"> <div class="form-group"> <label class="col-xs-3 control-label">选择上传文件</label> <div class="col-xs-9"> <div class="input-group file-caption-main"> <div tabindex="500" class="form-control file-caption kv-fileinput-caption"> <div class="file-caption-name"></div> </div> <div class="input-group-btn"> <div tabindex="500" class="btn btn-primary btn-file"> <i class="glyphicon glyphicon-folder-open"></i> <span class="hidden-xs">浏览 …</span> <input class="form-control projectfile" type="file"> </div> </div> </div> </div> </div> <input type="hidden" name="containerName" id="containerName" value="${containerName!}"> <input type="hidden" name="namespace" id="namespace" value="${namespace!}"> </form> |
js部分代码(使用ajax进行文件的上传)
$.ajax({
url : '',
dataType : 'json',
data : form,
type : 'POST',
processData : false, // 告诉jQuery不要去处理发送的数据
contentType : false,
success : function(result){
。。。。。。。。。。。。。。
其中的data:
var form = new FormData();
var fileObj = document.getElementById("uploadFileName").files[0];
var fileName = $("#fileName").val();//文件的名字
var containerName = $("#containerName").val();
var namespace = $("#namespace").val();
form.append("file", fileObj);
form.append("fileName", fileName);
后台接收代码
/**
* 文件上传
*
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public ResponseData<String> upload(HttpServletRequest request,
@RequestParam("file") CommonsMultipartFile file, String fileName) {
//可以对file进行一些列的操作,以后的细化可以在service层进行操作
//下面列举一些常见的操作
file.getOriginalFilename();
file.getName();
file.getBytes();
file.getContentType();
file.getSize();
file.isEmpty()
//文件的保存
String filePath = "D:\file emp";
File fileTemp = new File(filePath);
//临时存放的路径不存在情况下 创建路径
if(!fileTemp.exits()) {
fileTemp.mkdirs();
}
file.transferTo(fileTemp);
return data;
}
文件的下载
这里面可以使用:①<a href="${baseUrl}/file/download"/>
②使用ifream
这里介绍的使用第二种的方法
<iframe id="iframeForDownload" style="display:none" width="0" height="0"></iframe>
点击事件之后可以设置:$("#iframeForDownload").src=baseUrl+"/file/download";
后台代码
/**
*文件下载
*
*/
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletRequest request, HttpServletResponse response, @RequestParam String containerPath,
@RequestParam String uuid) {
File file = new File("E:\file\ emp\name.jpg");
OutputStream out = null;
InputStream in = null;
if (null != file && file.length() > 0) {
try {
String fileName = URLEncoder.encode("name.jpg", "UTF-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addDateHeader("Expries", 0);
in = new FileInputStream(file);
out = response.getOutputStream();
StreamUtils.copy(in, out);
} catch (Exception e) {
LOGGER.error("Container file download error:", e);
} finally {
try {
in.close();
out.close();
} catch (Exception e) {
......
}
}
}
}