前端
上传界面
<!-- 上传文件用post 有图片 表单传输数据的编码类型设置为多媒体格式 -->
<form action='/first/UploadServlet' method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile1">
<input type="text" name='test1'>
<input type="text" name='test2'>
<input type="submit" value='上传'>
</form>>
跳转显示界面
<img src="<%=request.getAttribute("fn") %>" />
servlet
注意我们需要在Tomcat中鲜见一个虚拟路径
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// doGet(request, response);
System.out.println("-------------");
try {
upload(request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//页面跳转
request.getRequestDispatcher("/web/Demo5.jsp").forward(request,response);
}
}
//上传功能
private void upload(HttpServletRequest request) throws FileUploadException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);//解析请求为一个集合
for(FileItem item:items) {
System.out.println(item.isFormField());
//判断表单中字段是否是普通元素 文件域不是普通元素
if(item.isFormField()) {
System.out.println(item.getFieldName());
String val = item.getString();//得到普通表达元素的内容
System.out.println(val);
}else {
System.out.println(item.getSize());
if(item.getSize() == 0) {
continue;
}
InputStream is = item.getInputStream();//图片以字节流形式输入
//表单名称 上传的文件名 可以根据getName提取后缀名
byte[] b = new byte[1024 * 1024];
int i = -1;
System.out.println(item.getFieldName()+" "+item.getName());
String filename = item.getName();
String name = "C:\\Users\\yan\\Pictures\\Camera Roll\\";
filename = UUID.randomUUID().toString()+filename.substring(filename.indexOf("."));
//生成唯一文件名
FileOutputStream fw = new FileOutputStream(name + filename);
while(-1 != (i = is.read(b))) {
fw.write(b,0,i);
}
fw.flush();
fw.close();
is.close();
//在request域中存放自定义的名称和 虚拟路径名+上传过程中产生出来的文件名
request.setAttribute("fn", "/test/"+filename);
}
}
}