在jsp中,表单中设置为ENCTYPE= "multipart/form-data " 之后,后天servlet无法通过request来获得表单提交的值了,因为传递的是二进制。
1、想知道如何不用其他组件来完成接收表单传递过来的值尼?
2、我表单中的值包括图片和文字(类似于发微博的那个表单一样,即可以发文字也可以上传图片)。请问我表单设置为ENCTYPE= "multipart/form-data " 之后,我应该怎么在servlet中区分我接收的值是图片还是发表的文字尼。
1、想知道如何不用其他组件来完成接收表单传递过来的值尼?
2、我表单中的值包括图片和文字(类似于发微博的那个表单一样,即可以发文字也可以上传图片)。请问我表单设置为ENCTYPE= "multipart/form-data " 之后,我应该怎么在servlet中区分我接收的值是图片还是发表的文字尼。
import java.io.File;
import java.io.IOException;
import java.util.List;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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
DiskFileItemFactory factory = new DiskFileItemFactory();
String path = req.getRealPath("/upload");
factory.setRepository(new File(path));
factory.setSizeThreshold(1024 * 1024);
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List<FileItem> list = (List<FileItem>)upload.parseRequest(req);
for(FileItem item : list)
{
String name = item.getFieldName();
if(item.isFormField())
{// 普通表单值
String value = item.getString();
}
else
{// 上传文件
String value = item.getName();
int start = value.lastIndexOf("\\");
String fileName = value.substring(start + 1); item.write(new File(path, fileName));
//
// OutputStream os = new FileOutputStream(new File(path, fileName));
//
// InputStream is = item.getInputStream();
//
// byte[] buffer = new byte[400];
//
// int length = 0;
//
// while((length = is.read(buffer)) != -1)
// {
// os.write(buffer, 0, length);
// }
//
// is.close();
// os.close();
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
}
}
感谢了,已经得到post的值了,正在解析中