Spring文件下载与上传 FormData

Posted licunzhi2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring文件下载与上传 FormData相关的知识,希望对你有一定的参考价值。

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\temp";
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\\\temp\\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) {
......
}
}
}
}




















































































































以上是关于Spring文件下载与上传 FormData的主要内容,如果未能解决你的问题,请参考以下文章

Spring中如何通过form-data传输多文件数据

spring 注解上传文件 @RequestParam

vue axios 与 FormData 结合 提交文件 上传文件

在 Spring Boot App 中使用 Jquery 和 FormData 提交表单字段并上传 File 到 Spring MVC Controller

php 下 html5 XHR2 + FormData + File API 上传文件

Vue-resource + FormData 文件上传与 Laravel 后端