用Commons组件里upload时候参数的问题

使用FileUpload的时候,不能再使用getParameter来取得参数了。这时候使用另外的方式来取得参数。看程序
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.pegasus.kaka.img.tools.ImageManager;
import com.pegasus.kaka.tools.XMLUtils;

public class FileUploadServlet extends HttpServlet {
public static final SimpleDateFormat SDF=new SimpleDateFormat("yyyyMMdd");
private static final long serialVersionUID = 1L;
// 定义文件的上传路径
private String uploadPath = "D:\\";// 1247038_7c86df6f1e1956f9722b67e33ba6bbaa.jpg
// 限制文件的上传大小
private int maxPostSize = 100 * 1024 * 1024;

public FileUploadServlet() {
super();
}

@Override
public void init(ServletConfig config) throws ServletException {       
super.init(config);
if(getServletContext().getInitParameter("folder")!=null)
uploadPath=getServletContext().getInitParameter("folder");
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);

}

@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTf-8");
//默认的一些参数
int product_id=0,class_id=0;      
//如果标签为空的时候让其为tag吧
String tag="";    
String url="";
// 保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
PrintWriter out=response.getWriter();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(maxPostSize);
try {
List<FileItem> fileItems = upload.parseRequest(request);
Iterator<FileItem> iter = fileItems.iterator();
String filename="";
while (iter.hasNext()) {

FileItem item = iter.next();
//    为文件类型
if (!item.isFormField()) {
String orginalName = item.getName();
String name=SDF.format(new Date())+System.currentTimeMillis()+orginalName.substring(orginalName.lastIndexOf("."));
try {

File file=new File(uploadPath +"original"+File.separator+ name);
filename=file.getName();
item.write(file);
ImageManager.getThumbnail(file,uploadPath);
url="/java/img/thumbnail/"+name;


} catch (Exception e) {

out.println(e.toString());
}
}else//表单数据..
{
if(item.getFieldName().equals("Product_ID")){
product_id=Integer.parseInt(item.getString("UTF-8"));
continue;
}
if(item.getFieldName().equals("Class_ID")){
class_id=Integer.parseInt(item.getString("UTF-8"));
continue;
}
if(item.getFieldName().equals("Tag")){
// tag=item.getString();
tag=item.getString("UTF-8");
continue;
}   

}

}ImageManager.insertIntoDB(product_id,filename,tag,class_id,url);
String result=XMLUtils.XML_HEAD+"<result>"+"图片上传成功"+"</result>\n<url>"+url+"</url>\n<name>"+filename+"</name>";
out.write(result);
} catch (FileUploadException e) {
out.println(e.toString());
} finally{
out.flush();
out.close();
}

}
}
注意加粗体的部分是对表单数据处理,这里接受的数据时Flex客户端post过来的,使用其它的方式传递应该也可以。
原文地址:https://www.cnblogs.com/macula7/p/1960399.html