src/org/bs/servlet/backend/MultipartRequestWrapper.java

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

package org.bs.servlet.backend;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import org.apache.commons.io.FilenameUtils;

public class MultipartRequestWrapper extends HttpServletRequestWrapper {

	private Map allParams;
	
	public MultipartRequestWrapper(HttpServletRequest request) {
		super(request);
		
		//首先判断是否multipart编码类型
		//如果是multipart编码类型,就逐个从request中取出各个表单域
		//如果表单域是普通的表单域,则将它的值取出,放到allParams中
		//如果表单域是文件,则
		//1、把文件先存储到磁盘的某个目录中!
		//2、把文件的有关信息(名称,类型,上传时间)包装成Attachment[]类型
		//3、把包装好的Attachment[]类型,放到allParams中

		try {
			//首先,判断是否multipart编码类型
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			if(!isMultipart){
				allParams = request.getParameterMap();
			}else{
				allParams = new HashMap();
				ServletFileUpload upload = new ServletFileUpload();
				FileItemIterator iter = upload.getItemIterator(request);
				while(iter.hasNext()){
					FileItemStream item = iter.next();
					//得到表单域的名称
				    String name = item.getFieldName();
				    //得到表单域的值(这是一个输入流)
				    InputStream stream = item.openStream();
				    
				    //如果是普通表单域
				    if(item.isFormField()){
				    	String value = Streams.asString(stream,request.getCharacterEncoding());
				    }else{ //如果是文件
				    	if(stream.available() != 0){//如果文件域没有选择文件,则忽略处理
					    	String filename = item.getName(); //得到上传的文件名称
					    	if(filename != null){
					    		//因为在IE下面,上传的文件还包含有此文件在客户端机器的路径
					    		//所以,要把这个路径去掉,只取文件名
					    		filename = FilenameUtils.getName(filename);
					    	}
					    	//将上传文件的输入流输出到磁盘的文件上
//					    	Streams.copy(stream, new FileOutputStream(Attachment.ATTACHMENT_DIR+filename), true);
后面还有 12 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。