文件上传
首先要下载commons-fileupload.jar commons-io.jar包
upfile.jsp
<from action="upload" method="post" entype="multipart/form-data">
上传照片<input type="file" name="photo" />
<input type="submit" value="上传" />
</from>
servlet
doget方式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8);
response.setContentType("text/html charset=utf-8");
//上传
boolean isMultipart = servletFileUpload.isMultipartContent(request);
if(isMultipart){
//判断前台form是否有multiparty
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//通过parseRequest解析form中的所有请求字段,并保存到items集合中
List<FileItem> items = upload.parseRequest(request);
Iteractor<FileItem> iter = items.iterator();
while(item.hasNext()){
FileItem item = iter.next();
int sno = -1;
String sname = null;
//判断前端是普通字段还是文件字段
if(item.isFormField()){
if(item.getFiledName().equals("sno")){
//根据name属性判断
sno=Integer.parseInt(item.getString());
}else if(itemName.equals("sname")){
system.out.println("utf-8");
}else{
system.out.println("其他字段");
}else{
String fileName = item.getName();
//获取文件内容并上传,定义文件路径,指定上传的位置
//动态获取服务器路径
String path = request.getSession().getServletContext().getRealPath();
File file = new File(path,fileName);
item.write(file);//上传
return;
}
}
}
}
下载
jsp
<a href="DownloadServlet?filename=文件名"></a>
DownloadServlet
doget方式
reuqest.setCharacterEncoding("utf-8");
//获取要下载的文件名
String filename = request.getParameter("filename");
response.addHeader("contentType",application/octet-stream);
response.addHeader("contentType","attachement;filename-+"filename);
InputStream in = request.getServletContext.getResourceAsStream("filename");
ServletOutputStream out = resmponse.getOutputStream();
byte[] bs = new byte[10];
int len = -1;
while((len=in.read(rs))!=-1){
out.write(bs,0,len);
}
out.close();
注意:这里省略了抛异常的代码
下载时文件名乱码解决方法:
response.addHeader("contentType","attachement;filename-+"filename);
IE浏览器
加入URLEncoder.encode(filename,"utf-8");
firefox
给文件名加前缀=?,utf-8?B?
String( Base64.encodeBase64(fileName.getBytes("utf-8")+ =?,utf-8?B?