分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

基于SSM框架的文件上传

发布时间:2023-09-06 01:06责任编辑:胡小海关键词:文件上传

我整理了一下,这个办法在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框架的文件上传

原文地址:http://www.cnblogs.com/yeyeck/p/7442202.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved