SpringMvc通过controller上传文件代码示例

时间:2022-05-06 21:31:39

  上传文件这个功能用的比较多,不难,但是每次写都很别扭。记录在此,以备以后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通过controller上传文件代码示例的更多相关文章

  1. springMVC+jsp+ajax上传文件

    工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...

  2. springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传

    总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...

  3. ajaxFileUpload上传文件简单示例

    写在前面: 上传文件的方式有很多,最近在做项目的时候,一开始也试用了利用jquery的插件ajaxFileUpload来上传大文件,下面,用一个上传文件的简单例子,记录下,学习的过程~~~ 还是老样子 ...

  4. SpringMVC&plus;jquery&period;uploadify 上传文件

    前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在C ...

  5. iOS上传文件代码,自定义组装body

    以下代码为上传文件所用代码,简单方便,搞了好久,终于知道这么简单的方式来上传. 其它类库也就是把这几句代码封装的乱七八糟得,让你老久搞不懂原理.不就是在body上面加点字符串,body下面加点字符串, ...

  6. ExtJS &plus; fileuploadfield上传文件代码

    后台服务端接收文件的代码: /** * 后台上传文件处理Action */ @RequestMapping(value = "/uploadFile", method=Reques ...

  7. php 上传文件代码

    通过 PHP,能够把文件上传到server.里面加入一些图片的推断,假设不加推断文件的类型就能够上传随意格式的文件. 为了站点的安全,肯定不让上传php文件,假设有人进入你的后台,上传了一个php文件 ...

  8. SpringMVC使用FileUpload上传文件

    进口FileUpload和common-io的Jar包 注意:1.Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiP ...

  9. springMVC结合AjaxForm上传文件

    最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...

随机推荐

  1. osgEarth基础入门

    osgEarth基础入门 2015年3月21日 16:19 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件 ...

  2. 批量关闭 WordPress 的 Pingback 和 Trackback 功能

    方法很简单,WordPress 后台即可实现,在设置-讨论中把"接收来自外部博客的引用通告(Pingback 和 Trackback)"这一项勾选去掉,保存设置.这样,以后新增的文 ...

  3. 泡泡堂、QQ堂游戏通信架构分析

    http://blog.csdn.net/sodme/article/details/468327#comments ————————————————————————————————————————— ...

  4. Discuz经典函数注释之authcode

    Discuz函数中最经典的函数是authcode函数,因为supesite,UCenterHome,UCenter,Discuz X都使用了这个函数进行加密啊传输串与cookie 今天为大家带来aut ...

  5. Codeforces Round &num;441 &lpar;Div&period; 2&comma; by Moscow Team Olympiad&rpar; D&period; Sorting the Coins

    http://codeforces.com/contest/876/problem/D 题意: 最开始有一串全部由"O"组成的字符串,现在给出n个数字,指的是每次把位置n上的&qu ...

  6. jquery 查找子窗口

    $("#订单信息").contents().find('div.datagrid-body').hide();$("#订单信息").contents().fin ...

  7. 安装IDEA的历程

    安装IDEA的历程 写这篇博客的主要目的就是记录自己安装IDEA的"复杂"过程,顺便给一些需要帮助的人提供一些帮助,以及让他们可以少走一些弯路.之所以说"复杂" ...

  8. 简约时尚商城wordpress主题-storefront

    wordpress主题:简约时尚商城主题-storefront 简简单的商城模板,挺适合一些懒人所用.后天功能也挺不错,希望大家喜欢. WooCommerce 集成 商城是基为用 WooCommerc ...

  9. UVa 12099 The Bookcase - 动态规划

    题目大意 给定一些书,每个书有一个高度和宽度,然后将它们放到一个三层的书架里(要求每一层都不为空).定义书架的大小为每层最大的高度和 乘 每层宽度和的最大值.求最小的书架大小. 显然动态规划(直觉,没 ...

  10. java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =&quot ...