基于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 ...
随机推荐
- useradd新建用户和权限分配
场景:在搭建Ftp服务器时候,需要新建ftp用户,其实新建的ftp用户和Linux中root新建的用户一样,只是需要了解新建用户时候的相关规则. 1 解决新建用户缺少配置文件 1.1 新建用户 指定目 ...
- QT QT creator QTsdk的区别
Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程. QT Creator 跨平台 ...
- 计时器C#
用于测某一方法执行所用的时间: Stopwatch sw = new Stopwatch(); sw.Start(); //功能代码块 sw.Stop(); long totalTime = sw.E ...
- yii2 获取从前台传过来的post数据
第一次使用yii写接口的时候,直接用了$_POST获取post数据,发现会报400错误,根本无法获取到post数据,用$_GET却能获取get数据. 纠结了很久,然后查资料,发现原来yii中默认的开启 ...
- 浅谈jQuery Pagination Ajax 分页插件的使用
插件介绍 此插件是jQuery的ajax分页插件.分页切换时无刷新也无延迟,因为是一次性加载的.如果你用到此插件作分页的时候,涉及到的数据量大,建议不要使用此插件,因为加载慢会导致用户体验不好! 插件 ...
- Java 期末考试
一: 题目:打印出100-999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花 ...
- JavaWeb学习归档(一) - HTTP协议总结
版权声明:本文为博主原创文章,未经博主允许不得转载. 本文转载自我的个人博客:http://www.codingme.net/post/java-web-01 HTTP协议简介 超文本传输协议(HTT ...
- wamp问题:关于另个php.ini文件的”…
一.现象解说 修改从图表打开的php.ini文件,重启apache后,我们的问题没有解决... 二.解决方法 1.php.ini的位置 wamp/apache2/bin/php.ini wamp/ph ...
- RabbitMQ入门-Topic模式
上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...
- Android 原生 Intent 分享支持的那些事
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 对于一个 App ...