基于SSM框架的文件上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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;
        
    }

}

最后测试结果

技术分享

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

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

 

以上是关于基于SSM框架的文件上传的主要内容,如果未能解决你的问题,请参考以下文章

一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

520前,我放弃陪女朋友时间,被迫写代码:“SSM框架整合+excel文件上传到数据库+数据更新“

基于 xml 配置文件的入门级 SSM 框架整合

SSM框架基于JAVA的网络文件管理系统

ssm框架下的文件上传和文件下载

SSM框架之文件上传