SpringMvc通过controller上传文件代码示例
上传文件这个功能用的比较多,不难,但是每次写都很别扭。记录在此,以备以后copy用。
package com.**.**.**.web.api; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL; /**
* @Author: zyydd
* @Date: 2019/10/12 14:18
*/
@RestController
@RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class UploadController { private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
/**
* 桶名,取配置
*/
@Value("${jss.bucket}")
private String bucket; private static String key = "file";
private static String springProperties = "application.properties"; @ResponseBody
@RequestMapping(value = "/upload/{fileType}", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ApiOperation(value = "文件上传", notes = "文件上传,form-data,key=file;fileType:pic、file", response = String.class, tags = {"UploadController",})
public String uploadFile(HttpServletRequest request, @PathVariable(value = "fileType") String fileType) {
String result = "";
String fileAbsolutePath = "";
try {
logger.info("uploadFile begin! fileType={}", fileType);
//写本地文档
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartHttpServletRequest.getFile(key);
String fileName = multipartFile.getOriginalFilename();
//文件名称加随机数处理,避免重名
fileName = fileName.substring(0, fileName.lastIndexOf(".")) + "_" + System.currentTimeMillis() % 1000 + fileName.substring(fileName.lastIndexOf("."));
fileAbsolutePath = getUploadPath() + fileName;
writeFile(fileAbsolutePath, multipartFile.getBytes());
//上传各种云的utils,返回一个上传后可供下载的url,注解掉,按需处理。传入本地文件的绝对路径以及云上桶名
String url = AmazonS3Utils.uploadFileToS3(fileAbsolutePath, bucket);
if (StringUtils.isNotBlank(url)) {
//持久化file数据到数据库,返回数据ID,前台页面根据ID进行挂载,按需处理
Long fileId = fileService.insertFile(url, fileType);
result = fileId + "";
} else {
logger.error("上传云失败,文件本地路径={}", fileAbsolutePath);
result = "上传云失败";
}
} catch (Exception e) {
result = "上传异常";
logger.error("uploadFile exception!", e);
} finally {
//上传完成之后,确保删除本地文件
try {
if (StringUtils.isNotBlank(fileAbsolutePath)) {
File f = new File(fileAbsolutePath);
if (f.exists()) {
f.delete();
}
}
} catch (Exception e) {
logger.error("delete file exception", e);
result = "删除本地文件异常";
}
logger.info("uploadFile end! result={}", result);
return result;
}
} //通过spring的配置文件,来获取war包的绝对路径,并将文件上传到预先准备的文件夹下
private String getUploadPath() {
URL url = this.getClass().getClassLoader().getResource(springProperties);
String uploadPath = url.getPath().replace(springProperties, "upload/");
return uploadPath;
} public static void writeFile(String fileAbsolutePath, byte[] content) throws IOException {
FileOutputStream fos = new FileOutputStream(fileAbsolutePath);
fos.write(content);
fos.close();
} }
相应的,postMan中,调用的示例截图如下

SpringMvc通过controller上传文件代码示例的更多相关文章
- springMVC+jsp+ajax上传文件
工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- ajaxFileUpload上传文件简单示例
写在前面: 上传文件的方式有很多,最近在做项目的时候,一开始也试用了利用jquery的插件ajaxFileUpload来上传大文件,下面,用一个上传文件的简单例子,记录下,学习的过程~~~ 还是老样子 ...
- SpringMVC+jquery.uploadify 上传文件
前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在C ...
- iOS上传文件代码,自定义组装body
以下代码为上传文件所用代码,简单方便,搞了好久,终于知道这么简单的方式来上传. 其它类库也就是把这几句代码封装的乱七八糟得,让你老久搞不懂原理.不就是在body上面加点字符串,body下面加点字符串, ...
- ExtJS + fileuploadfield上传文件代码
后台服务端接收文件的代码: /** * 后台上传文件处理Action */ @RequestMapping(value = "/uploadFile", method=Reques ...
- php 上传文件代码
通过 PHP,能够把文件上传到server.里面加入一些图片的推断,假设不加推断文件的类型就能够上传随意格式的文件. 为了站点的安全,肯定不让上传php文件,假设有人进入你的后台,上传了一个php文件 ...
- SpringMVC使用FileUpload上传文件
进口FileUpload和common-io的Jar包 注意:1.Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiP ...
- springMVC结合AjaxForm上传文件
最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...
随机推荐
- WPF 精修篇 缩放ScaleTransform
原文:WPF 精修篇 缩放ScaleTransform 缩放 ScaleTransform 参数 ScaleX X轴缩小值 正常为1 ScaleY Y轴缩小值 正常为1 CenterY ,Cente ...
- Javascript 日历插件
1. The Coolest Calendar 界面非常漂亮的一款日期选择插件,有详细的使用文档,最新版本 1.5. 点击下载 查看示例 2. DatePicker 这款日期插件支持单选.多选和 ...
- Python学习笔记之将数据写入到文件中
10-3 访客:编写一个程序,提示用户输入其名字:用户作出响应后,将其名字写入到文件guest.txt 中. 编写Python代码: username = input("Please ent ...
- Android源码分析(十一)-----Android源码中如何引用aar文件
一:aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址:packages/apps/Settings/Android.mk LOCAL_PAT ...
- Mysql数据库之慢查询
一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...
- Nginx 核心配置-检测文件是否存在
Nginx 核心配置-检测文件是否存在 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件 ...
- 使用apache.tika判断文件类型
一. 判断文件类型一般可采用两种方式 1. 后缀名判断 简单易操作,但无法准确判断类型 2. 文件头信息判断 通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一 ...
- <人人都懂设计模式>-装饰模式
书上,真的用一个人穿衣打拌来讲解装饰模式的呢. from abc import ABCMeta, abstractmethod class Person(metaclass=ABCMeta): def ...
- eclipse---之Console窗口命令行输入
在 Eclipse 中使用 Windows 命令行. 第一步:设置一个新的外部配置工具 在 Eclipse 中,选择 “Run -> External Tools -> External ...
- btcWallet系列之一-grpc模块
btcwallet对外服务 btcwallet除了像btcd对外提供rpc服务以外,还提供了grpc服务,同时grpc采用的是protobuf来实现. 这方便与不同语言进行交互,降低客户端代码编写量. ...