jsp ENCTYPE= "multipart/form-data " 接收值问题

d41741 2012-02-02 02:08:24
在jsp中,表单中设置为ENCTYPE= "multipart/form-data " 之后,后天servlet无法通过request来获得表单提交的值了,因为传递的是二进制。
1、想知道如何不用其他组件来完成接收表单传递过来的值尼?
2、我表单中的值包括图片和文字(类似于发微博的那个表单一样,即可以发文字也可以上传图片)。请问我表单设置为ENCTYPE= "multipart/form-data " 之后,我应该怎么在servlet中区分我接收的值是图片还是发表的文字尼。


...全文
225 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
d41741 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xu_521174 的回复:]

你可以拿到你上传文件的路径截取后面的文件格式作为字符串判断一下
[/Quote]
感谢,正在尝试中。
xu_521174 2012-02-02
  • 打赏
  • 举报
回复
你可以拿到你上传文件的路径截取后面的文件格式作为字符串判断一下
d41741 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 licip 的回复:]

用request.getInputStream()去得到,不管是文字还是图片都变成流成的形式,然后 每个值与另一个值之的间隔好像是有一个=====================的标记,具体多少个=我记不清了。
[/Quote]
用request.getInputStream();得到了一串------------TtGTLZCcPNpxX7aEkO8WIu--,应该怎么从这段中区分我的文字和图片啊!
tianhandigeng1498 2012-02-02
  • 打赏
  • 举报
回复
不用自己解析,用apache的fileupload工具类就行了,自己搜搜看
licip 2012-02-02
  • 打赏
  • 举报
回复
用request.getInputStream()去得到,不管是文字还是图片都变成流成的形式,然后 每个值与另一个值之的间隔好像是有一个=====================的标记,具体多少个=我记不清了。
d41741 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xinlan1022 的回复:]

1.不使用工具的话可以用request.getInputStream(),可以得到post过来的东西,然后再自己解析

2.至于图片和文字等你看到上面的post的内容就明白了,自己解析起来比较麻烦,要注意的地方蛮多的,你还是用工具吧
[/Quote]

感谢了,已经得到post的值了,正在解析中。。。
xinlan1022 2012-02-02
  • 打赏
  • 举报
回复
1.不使用工具的话可以用request.getInputStream(),可以得到post过来的东西,然后再自己解析

2.至于图片和文字等你看到上面的post的内容就明白了,自己解析起来比较麻烦,要注意的地方蛮多的,你还是用工具吧
Acesidonu 2012-02-02
  • 打赏
  • 举报
回复

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);
}
}

爱摸鱼de老邪 2012-02-02
  • 打赏
  • 举报
回复
找个你说你不想用的开源包,看看源码就知道怎么做了
d41741 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ihtml 的回复:]

貌似只能手工分析流的内容了
[/Quote]

能详细点么,我现在连值都接收不到啊!分析不了啊。
结贴是美德 2012-02-02
  • 打赏
  • 举报
回复
貌似只能手工分析流的内容了

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧