Spring文件下载与上传 FormData

Spring实现文件的上传与下载

文件上传可以使用FormData
前端实现代码:使用表单进行提交

<form class="form-horizontal" method="post" id="uploadFileForm"
enctype="multipart/form-data" οnkeydοwn="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) {
......
}
}
}
}

转载于:https://www.cnblogs.com/licunzhi/p/7416356.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 `@RequestParam` 注解来接受 formdata 中的文件数组对象。具体步骤如下: 1. 创建一个表单,其中包含一个 file input,可以选择多个文件: ```html <form method="POST" enctype="multipart/form-data" action="/upload"> <input type="file" name="files" multiple> <button type="submit">上传</button> </form> ``` 2. 在控制器中创建一个方法来处理上传请求,使用 `@RequestParam` 注解来接受文件数组对象: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("files") MultipartFile[] files) { // 处理文件上传逻辑 } ``` 在上面的代码中,`@RequestParam("files")` 表示要接受名为 "files" 的参数,它是一个文件数组对象。`MultipartFile` 是 Spring 提供的一个文件上传对象,它封装了上传的文件内容、文件名等信息。 3. 处理文件上传逻辑,例如将文件保存到本地磁盘: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("files") MultipartFile[] files) { for (MultipartFile file : files) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); Path path = Paths.get(file.getOriginalFilename()); Files.write(path, bytes); } catch (IOException e) { e.printStackTrace(); } } } return "redirect:/"; } ``` 在上面的代码中,我们遍历了文件数组对象,对于每个文件,判断它是否为空,如果不为空,则将文件内容保存到本地磁盘上。最后返回一个重定向到首页的视图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值