基于SSM框架的文件上传
我整理了一下,这个办法在Servlet上应该也用得上。其实文件上传主要的问题是在于存储路径的拼接。
这里我是把东西存在Web项目的WebContent目录下的
下面贴一些代码
目标应该是这样一个格式 Workspace\ProjectName\自定义目录\fileName
于是就有下面三段代码



然后直接拼接起来就行了。下面我直接贴代码吧
首先是jsp的form部分
<form action="upload" encType="multipart/form-data" method="post">
<label>选择文件</label>
<input id="fileId" name="file" type="file"/>
<input type="submit" value="提交"/>
</form>
然后是Controller部分
@RequestMapping("/upload")
public String uploadImg(HttpServletRequest request) throws IllegalStateException, IOException
{
//拼接文件存储的目录
String temp=Thread.currentThread().getContextClassLoader().getResource("").getPath();
int num=temp.indexOf(".metadata");
String path=temp.substring(1,num).replace('/', '\\')+request.getContextPath().replaceAll("/", "")+"\\WebContent\\images\\";
//上传文件
List<String> list = FileUtil.upLoad(request, path);
request.setAttribute("path", list.get(0));
System.out.println(list.get(0));
return "uploadok";
}
最后是我在FileUtil里封装的一个办法,其实我很纠结要不要单文件、多文件分开来。最后我使用List来返回存储的路径,后面可能会根据需要改
package com.yck.util;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class FileUtil
{
public static List<String> upLoad(HttpServletRequest request,String path)
{
List<String> list = new ArrayList<String> (); //存放结果
//1、将当前上下文初始化给CommonMutipartResolver
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//2、检查Form中encType是否为multipart/form-data
if(multipartResolver.isMultipart(request))
{
//将request转为MultipartHttpServletRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取迭代器遍历multipartRequest里的文件名
Iterator<String> iter = multipartRequest.getFileNames();
while(iter.hasNext())
{
//获取文件并向下遍历
MultipartFile file = multipartRequest.getFile(iter.next().toString());
if(file != null)
{
//获取文件类型,即后缀名
String str = file.getOriginalFilename();
String suffix = str.substring(str.lastIndexOf("."));
//用 当前日期+UUID作为文件名避免重名
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(new Date()).replaceAll("-", "");
String name = dateStr +UUID.randomUUID().toString().replaceAll("-", "");
//拼接文件绝对路径
String filePath = path + name + suffix;
try
{
file.transferTo(new File(filePath));
} catch (IllegalStateException | IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
list.add(filePath);
}
}
}
return list;
}
}
最后测试结果

控制台输出的路径也是符合预期的
基于SSM框架的文件上传的更多相关文章
- 回忆曾经的SSM框架实现文件上传
近期在使用springboot实现文件上传的功能,想到曾经用SSM做过这个功能,在这里记录一下过去实现的方式 maven添加文件上传所需的依赖 springMVC的配置文件配置一下文件上传 我实现的是 ...
- 【转】NodeJS教程--基于ExpressJS框架的文件上传
本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...
- jersey框架实现文件上传
jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- SpringMVC框架06——文件上传与下载
1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...
- Servlet3.0学习总结——基于Servlet3.0的文件上传
Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- layUI框架中文件上传前后端交互及遇到的相关问题
下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...
随机推荐
- Java并发编程笔记——技术点汇总
目录 · 线程安全 · 线程安全的实现方法 · 互斥同步 · 非阻塞同步 · 无同步 · volatile关键字 · 线程间通信 · Object.wait()方法 · Object.notify() ...
- HTML5的应用缓存
HTML5:提供一种应用缓存机制,使得基于web的应用程序可以离线运行.开发者可以使用 Application Cache (AppCache) 接口设定浏览器缓存的数据并使得数据离线有效. 在处 ...
- 【mysql】常用操作
2.mysql service mysql status mysql --version mysql -h 服务器主机地址 -u 用户名 -p 用户密码 exit 退出 mysql -h 主机名 - ...
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- nginx响应高并发参数配置
一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...
- Spark No FileSystem for scheme file 解决方法
在给代码带包成jar后,放到环境中运行出现如下错误: Exception in thread "main" java.io.IOException: No FileSystem f ...
- AngularJs学习笔记3-服务及过滤器
距离上次别博客有有一段时间了,因为最近公司和个人事情比较多,也因为学习新的知识所以耽搁了,也有人说Angularjs1.5没有人用了,没必要分享,我个人感觉既然开头了我就坚持把他写完,对一些还在使用或 ...
- WPF中使用Data Annotations验证Model
.NET Framework中System.ComponentModel.DataAnnotations提供了很多属性来验证对象的属性.可以在C:\Program Files (x86)\Refere ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- 关于mac下配置mysql心得
PS:配置一个mysql烦了一天,不过还是有所收获. 首先,下载安装我就不多啰嗦了.关键是在我们安装的最后会有一个临时密码,例如我的PBxsy=ES71(u: 这是非常重要的信息,如果没有得到的话,建 ...