java上传文件需要的依赖_SpringBoot使用commons-fileupload上传文件的类

网上找了一些,都是基本介绍,没有直接就可以使用类,在实际工作当中都有适合当前项目的上传文件的方法,本人写了一个类,比较基础,但呆以满足项目的上传文件功能,使用了commons-fileupload这个组件,代码如下:

首先要在maven中加入依赖

commons-fileupload

commons-fileupload

1.3.3

UploadUtil.javapackage cn.form1.utils;

import org.springframework.util.ClassUtils;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import javax.servlet.http.HttpServletRequest;

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.*;

/**

* 文件上传类

*/

public class UploadUtil {

//上传的文件大小限制 (0-不做限制) ,单位:字节

private long maxSize = 0;

//允许上传的文件后缀,如:".jpg|.png|.git|.jpeg",为空不做限制

private String exts;

//保存根路径,会在tomcat的webapps自动创建该文件夹

private String rootPath = "uploadFile/";

//保存路径,如 "userimage"

private String savePath = "";

//子目录创建方式,默认:年-月

private  String subName = "yyyy-MM";

//是否启动时间格式的子目录

private boolean isSubName = true;

//上传的文件名称

private List fileNames;

//上传错误信息

private String error;

public UploadUtil() {

this.fileNames = new ArrayList();

}

public long getMaxSize() {

return maxSize;

}

public void setMaxSize(long maxSize) {

this.maxSize = maxSize;

}

public String getExts() {

return exts;

}

public void setExts(String exts) {

this.exts = exts;

}

public String getRootPath() {

return rootPath;

}

public void setRootPath(String rootPath) {

this.rootPath = rootPath;

}

public String getSavePath() {

return savePath;

}

public void setSavePath(String savePath) {

this.savePath = savePath;

}

public String getSubName() {

return subName;

}

public void setSubName(String subName) {

this.subName = subName;

}

public boolean getIsSubName() {

return isSubName;

}

public void setIsSubName(boolean isSubName) {

this.isSubName = isSubName;

}

public String getError() {

return error;

}

public void setError(String error) {

this.error = error;

}

public List getFileNames() {

return fileNames;

}

public void setFileNames(List fileNames) {

this.fileNames = fileNames;

}

/**

* 上传文件

* @param request 当前请求的request

*/

public boolean upload(HttpServletRequest request)  throws IllegalStateException, IOException {

//创建一个通用的多部分解析器

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(

request.getSession().getServletContext());

//判断 request 是否有文件上传,即多部分请求,其实判断是否为(enctype="multipart/form-data" method="POST")

if(multipartResolver.isMultipart(request)){

//转换成多部分request

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;

//取得request中的所有文件名

Iterator iter = multiRequest.getFileNames();

//记数器

int num = 0;

//web服务器文件根路径

String webFilePath;

//为批量上传,所以如果有下一个信息,能循环输出

while(iter.hasNext()){

webFilePath = "";

//取得上传文件

MultipartFile file = multiRequest.getFile(iter.next());

//如果type=file中有文件上传

if(!file.isEmpty()){

//取得当前上传文件的文件名称

String fileName = file.getOriginalFilename();

//获取文件大小,单位:字节

long fileSize = file.getSize();

/* 检查文件大小 */

if (!this.checkSize(fileSize)) {

this.setError("上传文件大小不符!");

return false;

}

//获取文件的后缀名

String suffixName = fileName.substring(fileName.lastIndexOf("."));

/* 判断文件后缀名是否合法 */

if(!this.checkExt(suffixName)){

this.setError("上传文件后缀不允许!");

return false;

}

//使用GUID重命名图片名称

fileName = UUID.randomUUID() + suffixName;

/* 获取Tomcat的webapps根目录 */

String projectPath = this.tomcatPath();

/* 是否生成子目录 */

String dateDir = this.dateDir();

//web服务器根目录文件路径

webFilePath = this.getRootPath() + this.getSavePath() + dateDir + fileName;

//文件最终保存全路径

String fileNamePath = projectPath + webFilePath;

//创建File对象

File localFile = new File(fileNamePath);

//检测是否存在目录,不存在则创建

if (!localFile.getParentFile().exists()) {

localFile.getParentFile().mkdirs();

}

//执行上传文件

file.transferTo(localFile);

}

//累加保存生成文件名

this.fileNames.add(num,webFilePath);

num++;

}

}

//没有上传任何文件,返回true,去判断返回文件List中的值

return true;

}

/**

* 检查文件大小是否合法

* @param size 文件大小,单位/字节

* @return boolean

*/

private boolean checkSize(long size) {

return !(size > this.getMaxSize()) || (0 == this.getMaxSize());

}

/**

* 检查上传的文件后缀是否合法

* @param ext 后缀

* @return boolean

*/

private boolean checkExt(String ext){

if(this.getExts().isEmpty()){

return true;

}else{

if(this.getExts().indexOf(ext) != -1){

return true;

}

}

return false;

}

/**

* 返回Tomcat的webapps根目录

* @return String 路径

*/

private String tomcatPath(){

//获取当前项目的运行环境根目录,如:/C:/myJavaEEWorkSpace/SpringGirl/target/classes/

String projectPath = ClassUtils

.getDefaultClassLoader()

.getResource("")

.getPath();

//返回Tomcat的webapps根目录 (考虑到每次发布会覆盖war,文件最好存在war外面)

projectPath = projectPath + "../../../";

return projectPath;

}

/**

* 是否生成子目录,返回子目录名称

* @return String 目录名称

*/

private String dateDir(){

//是否生成子目录

String dateDir;

if(this.getIsSubName()) {

//设置文件存放子目录

SimpleDateFormat df = new SimpleDateFormat(this.getSubName());// 设置日期格式

dateDir = df.format(new Date());// new Date()为获取当前系统时间

dateDir = dateDir + "/";

}else{

dateDir = "";

}

return dateDir;

}

}

使用方法/*

* 测试上文件传类

* */

@RequestMapping(value = "/uploadclass")

@ResponseBody

public String uploadclass(HttpServletRequest request) throws IllegalStateException, IOException{

UploadUtil upload = new UploadUtil();

upload.setMaxSize(50000);

upload.setExts(".jpg|.png|.gif|.jpeg");

upload.setSavePath("mydogimg/");

if(upload.upload(request)){

List list = upload.getFileNames();

String str = (String) list.get(0);

return str+"===";

}else{

return upload.getError();

}

}

支持单个或批量上传,如果type=file没有选择文件,就会返回空的字符串,上传文件是否为必须的需要用js去判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS for Android示例解析之离线地图-----LocalTiledLayer

转自:http://blog.csdn.net/wozaifeiyang0/article/details/7327423 LocalTiledLayer 看到这个标题是否是很激动,如题,该示例就是添加一个离线地图,这应该是很多开发人员期盼已久的功能了吧,正式版一处这个应该是一个很…

md5 算法java实现_java实现MD5算法

import java.security.MessageDigest;/** 加密工具*author 刘彦青***/public class EncryptUtil {/** MD5加密** param jiami* 源字符串* return 加密后的字符串 */public final static String md5(String jiami) {char hexDigits[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,…

wikioi 1017--乘积最大

给定一个数串,以及K,求对这个数串K划分的乘积最大值。 DP思路:一开始肯定想到的是递归,假设在某两个字符间有一个乘号,那么乘积最大就是乘号两边的区间接着划分的乘积最大值。 于是状态空间表示如下dp[i][k]表示从0~i之…

java在线找错_平台配置及测试错误提示及解决方案

平台配置错误提示及解决方案开发者在点击提交服务的时候可能会遇到以下各种各样的问题,本文列举出部分平台会弹出的提示,以便解决提交出现的问题。1、 请完成分发国家配置原因:未选择分发国家或未保存解决:在配置-发布国家中&…

d3 mysql_javascript – 在d3可视化中访问MySQL数据库

我需要一些关于d3和MySQL的帮助.以下是我的问题:我有数据存储在MySQL中(例如:关键字及其频率).我现在想用d3将其可视化.据我所知,d3需要json文件作为输入.我的问题是:如何从d3脚本访问这个MySQL数据库?我能想到的一种方法是&#…

resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目

resteasy开发Web服务的RESTful方法不断受到越来越多的关注,并且似乎正在将SOAP淘汰。 我不会讨论哪种方法更好,但是我相信我们都同意REST更轻量级。 在本教程中,我将向您展示如何使用RESTeasy开发RESTful服务以及如何将它们部署在Tomcat服务器…

java httpserver 多个接口_多个Servlet之间数据共享实现方案

1.数据共享:OneServlet工作完毕后,将产生数据交给TwoServlet来使用Servlet规范中提供四种数据共享方案1.ServletContext接口2.Cookie类3.HttpSession接口4.HttpServletRequest接口ServletContext接口:1.介绍:1)来自于Servlet规范中一个接口。…

【Java心得总结六】Java容器中——Collection

在【Java心得总结五】Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库。而在这篇博文中,我想着重对容器类库中的Collection容器做一个着重的探索与总结。 Collection:一个独立元素的序…

php 文章读取_php实现获取文章内容第一张图片的方法

本文实例讲述了php实现获取文章内容第一张图片的方法。分享给大家供大家参考。具体分析如下:采用php获取文章内容的第一张图片方法非常的简单,我们最常用的是使用正则了,感兴趣的朋友可以参考一下下面这段代码。以下是关于选取文章中第一张图…

相对路径

当前程序的所在目录textBox1.Text AppDomain.CurrentDomain.BaseDirectory; 返回D:\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\http://www.cnblogs.com/SissyNong/archive/2009/09/22/1571752.html 当前程序的完整路径textBox1.Text System.Diagnostics.…

php怎么传json数据_php和js如何通过json互相传递数据相关问题探讨

当我们在结合php和javascript实现某些功能时,经常会用到json。json是js的一种数据格式,可以直接被js解析。而php无法直接读取json数据,但是php提供了json_decode函数来对json数据进行转化,从而可以被php脚本访问。同时&#xff0c…

Java 8中的策略模式

这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。 PrintDependingOnInput方法是一种策略,该策略将根据传递的日志在System.println中显示一些消息。 AddPrefix是另一种策略,它将根据邮件内容为邮件添加前…

昨天帮同学的学校写了首校歌

转载于:https://www.cnblogs.com/del/p/3792526.html

php做一个微信退款,PHP实现微信申请退款流程实例代码

前面讲了怎么实现微信支付,详见博文:php实现微信支付(jsapi支付)流程 和ThinkPHP中实现微信支付(jsapi支付)流程。由于业务需求,还需要有微信退款,经过研究和摸索,也终于搞定了。前期准备:当然是搞定了微信…

gwt格式_使用Spring Security保护GWT应用程序的安全

gwt格式在本教程中,我们将看到如何将GWT与Spring的安全模块(即Spring Security)集成。 我们将看到如何保护GWT入口点,如何检索用户的凭据以及如何记录各种身份验证事件。 此外,我们将实现自定义身份验证提供程序&#…

php制图汉字,PHP用imageTtfText函数在图片上写入汉字

PHP绘图,imageString()这个函数并不支持汉字的绘制。这往往会给入门者当头一棒,不过不要着急,因为还有一个imageTtfText()函数,这个函数能绘制UTF-8编码的字符串,当然可以绘制汉字了。参数:$size 字体大小&…

K-Means算法Demo

简介:本Demo是参照这个网站上的Demo自己用Java实现的。将Java打包为Jar,再将Jar转为exe,源代码及程序Demo下载请点我。 K-Means算法简介 我尽量用通俗易懂但不规范的语言来描述K-Means算法。 K-Means算法是数据挖掘十大算法之一,是…

php 时间周期,php 的生命周期

1、PHP的运行模式:PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候,它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求&#xff0c…

领域驱动设计之领域模型_在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……...

领域驱动设计之领域模型埃里克埃文斯(Eric Evans)已制定了域驱动设计(DDD)。 Martin Fowler是DDD的大力支持者和拥护者。 这些都是非凡的名字,几乎可以肯定的是,他们正在支持一些有价值的东西。 我不是在这…

struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1.3.1这个包,如下图 我打开commons-loggin-1.3.1这个包看了一下,果然…