我整理了一下,这个办法在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;

    }

}

最后测试结果

控制台输出的路径也是符合预期的

 E:\ckck\EclipseOxygen\MyWeb\WebContent\images\59fd10b473d4463686e1bffeaca5c46c.jpg
 

基于SSM框架的文件上传的更多相关文章

  1. 回忆曾经的SSM框架实现文件上传

    近期在使用springboot实现文件上传的功能,想到曾经用SSM做过这个功能,在这里记录一下过去实现的方式 maven添加文件上传所需的依赖 springMVC的配置文件配置一下文件上传 我实现的是 ...

  2. 【转】NodeJS教程--基于ExpressJS框架的文件上传

    本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...

  3. jersey框架实现文件上传

    jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...

  4. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  5. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

  6. Servlet3.0学习总结——基于Servlet3.0的文件上传

    Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ...

  7. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  9. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

随机推荐

  1. node 控制 树莓派做的天气闹钟

    node 控制 树莓派做的天气闹钟 在成都上班,下雨天堵车,迟到的概率会很大. 正好手上有一块树莓派 ,做了一个晴雨闹钟. 下雨天 早上 7:00叫我起床 晴天 早上 7:30叫我起床 将自己喜欢的歌 ...

  2. 用Maven创建web项目

    使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...

  3. (转).tar.gz文件和.rpm文件的区别

    场景:在Linux环境下安装软件时候总是会遇到安装软件格式的选择,以及安装. 1 软件的二进制分发 Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式, 其优点是安装使用容易,缺 ...

  4. (转)eclipse报错及解决说明 "XX cannot be resolved to a type "

    场景:在项目开发时,一个工程引用另一个工程中的文件,出现报错“XX cannot be resolved to a type”,但是在实际通过跟踪“F3”能够找到相应的文件,最终用方法4解决. 引言: ...

  5. 初学安卓开发随笔之 Menu、toast 用法、活动的四种启动模式 以及 一个方便的Base活动类使用方法

    Toast toast 是安卓系统的一种非常棒的提醒方式 首先定义一个弹出Toast的触发点,比如可以是按钮之类 其中 Toast.LENGTH_SHORT是指显示时长 还有一个内置变量为Toast. ...

  6. ubuntu上安装nginx+mysql+php5-fpm(PHP5 - FastCGI Process Manager)

    题外话:由于近段时间测试环境ssh链路质量不大好,经常短线.故我把整个安装过程放到screen里去执行,以防止断线中断了安装过程.执行screen -S install,这样断线后,只要再执行scre ...

  7. [BZOJ 2500] 幸福的道路

    照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 368  Solved: 145[Submit][Sta ...

  8. python 文件打开小知识

    一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息. file.name : 返回文件的名称 file.closed: 文件关闭返回值为True,否则为False file.mod ...

  9. 六、vue如何缓存页面

    vue如何和ionic的缓存机制一样,可以缓存页面,在A页面跳转至B页面后返回A页面时A页面的数据还在? 在app.vue中将router-view使用keep-alive包起来,使用v-if来判断使 ...

  10. 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 Bug修复

    开篇语 昨晚发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 然后上午起来吃完午饭之后,我就准备继续开工的,但是突然的,想要看B站.然后在一股 ...