文件上传&下载
上传步骤:
1、创建解析工厂DiskFileItemFactory对象
2、使用DiskFileItemFactory 对象创建ServletFileUpload对象。
3、调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
4、对list进行迭代,每迭代一个FileItem对象,调用其isFormField方法判断是否为附件
5、普通表单字段,则调用getFieldName、getString方法得到字段名和字段值
6、文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。
下载步骤:
1.设置文件ContentType类型 “multipart/form-data“
2.设置文件头 “Content-Disposition”, “attachment;fileName=文件名”
3.通过response获取ServletOutputStream对象(out)
4.通过输出流(out)向浏览器响应文件
login.jsp设置view视图(附部分关键代码):
<body>
<form action="upload01" method="post" enctype="multipart/form-data">
<p>用户名:<input type="text" name="username" /></p>
<p>选择您要上传的文件:<input type="file" name="file" /></p>
<p>上传<input type="submit" value="上传" /></p>
</form>
</body>
controller包下servlet文件UploadServlet01.java,进行文件上传控制(仅附关键代码)
doPost中写入:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream is=null;
FileOutputStream fos=null;
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
try {
List<FileItem> list=upload.parseRequest(request);
for(FileItem li:list) {
//判断是否文本标签
if(li.isFormField()) {
String field=li.getFieldName();//获取标签名
String value=li.getString();//获取标签值
System.out.println(field+":"+value);
}else {
String filename=li.getName();//获取上传文件名
//文件输入流,读取数据
is=li.getInputStream();
//String path="D:\\upload";//保存在本地D盘下
String path = this.getServletContext().getRealPath("/upload/");//保存在Tomcat目录下
File file=new File(path);
if(!file.exists()) {
file.mkdirs();//创建目录
//file.createNewFile();此不创建文件,是因为FileOutputStream会自动帮创建文件而不创建目录
}
fos=new FileOutputStream(path+"\\"+filename);
int i=-1;
byte[] b=new byte[1024];
while((i=is.read(b))!=-1) {
fos.write(b,0,i);//i为向字节数组中写入字节的个数
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(is!=null) {
is.close();}
if(fos!=null) {fos.close();}
}
}
download.jsp,前端视图显示:
<body>
<a href="downLoad?filename=素质拓展流程.png">素质拓展流程.png</a>
</body>
controller包下servlet文件downloadServlet01.java,进行文件下载控制(仅附关键代码)
doPost中写入:
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
String fname=request.getParameter("filename");
String path=this.getServletContext().getRealPath("/upload");
String filename=path+"/"+fname;//filename为全路径
//设置响应头
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fname,"utf-8"));
//获取ServletOutputStream对象
ServletOutputStream out=response.getOutputStream();
//读文件
FileInputStream fis=new FileInputStream(filename);
int i=-1;
byte[] b=new byte[1024];
while((i=fis.read(b))!=-1) {
out.write(b,0,i);
}
fis.close();
out.close();
}
success.jsp,下载后回显:
<body>
<a href="downLoad?filename=素质拓展流程.png">素质拓展流程.png</a>
</body>
还没有评论,来说两句吧...