SSM整合中的文件上传

关于SSM的基本整合已经说过,大家可点击查看  点击打开链接  整合过程。

接下来,就项目中刚解决的文件上传问题进行分析。

在SSM中文件上传是必须先要引入支持文件上传的资源,我将它分为第三个部分:

第一部分是在  /BMS/config/spring/springmvc-config.xml  中用 bean 标签配置


	
	


Spring MVC是使用Apache Commons FileUpload技术实现一个MultipartResolver类:CommonsMultipartResolver。文件上传中,表单的method必须为post(JSP页面的post和get不支持大写),负责上传文件的表单和一般表单的区别在于,上传文件的表单enctype(表单的编码类型)设置为multipart/form-data,此时,浏览器才会用户选择的二进制数据发送给Tomcat服务器。

第二部分是引入分装好的文件上传类:

/BMS/src/com/wll/bms/utils/FileHelper.java   更改获取到的文件名称,重新命名存入数据库

package com.wll.bms.utils;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public final class FileHelper {
	public static String getRealFileName(String fileName){
        int start = fileName.lastIndexOf("\\");  
        String value ="";
        if(start>0){
        	value = fileName.substring(start+1);
        }else{
        	value = fileName;
        }
		return value;
	}
	
	public static String generateFileName(String fileName) {
		DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		String formatDate = format.format(new Date());
		int random = new Random().nextInt(10000);
		int position = fileName.lastIndexOf(".");
		String extension = fileName.substring(position);
		return formatDate + random + extension;
	}

	public static String FormetFileSize(long fileS) {
		DecimalFormat df = new DecimalFormat("#.00");
		String fileSizeString = "";
		if (fileS < 1024) {
			fileSizeString = df.format((double) fileS) + "B";
		} else if (fileS < 1048576) {
			fileSizeString = df.format((double) fileS / 1024) + "KB";
		} else if (fileS < 1073741824) {
			fileSizeString = df.format((double) fileS / 1048576) + "MB";
		} else {
			fileSizeString = df.format((double) fileS / 1073741824) + "GB";
		}
		return fileSizeString;
	}
}


/BMS/src/com/wll/bms/utils/HttpUtils.java  使用I/O流读取文件,获取系统当前路径,取出获取到的文件名

package com.wll.bms.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.Part;

public class HttpUtils {
	public static String  fileUpload(Part part,String parent) throws IOException{
		String imageName="";
		String realName=part.getSubmittedFileName();
		imageName=FileHelper.generateFileName(realName);
		if(part!=null){
			FileOutputStream out=null;
			InputStream in=null;
			try{
				File file=new File(parent,imageName);
				if(!file.exists()){
					file.createNewFile();
				}
				in=part.getInputStream();
				out=new FileOutputStream(file);
				byte [] cache=new byte[255];
				int length=0;
				while((length=in.read(cache))!=-1){
					out.write(cache, 0, length);
				}
			}catch(Exception e){
				
			}finally{
				if(in!=null){
					in.close();
				}
				if(out!=null){
					out.close();
				}
			}
		}
		return imageName;
	}
}

第三部分

1.页面需要支持post请求方式,编码类型设置

2.在业务控制器中需要传参

@RequestMapping(value="/addAdmin",method=RequestMethod.POST )
public String addAdmin(Admin admin,@RequestParam(value="fileName") MultipartFile file,
	HttpServletRequest request)throws Exception{
}
3.通过该语句可测试是否是获取到上传的文件名称

System.out.println("测试文件上传"+file.getOriginalFilename());

保证这三部分的完整就可以进行文件的上传。


当然,通过SSM中的文件上传和下载也可以写关于资源共享一类的项目。





你可能感兴趣的:(SSM整合,SSM,文件上传,上传)