前言
servlet技术实现文件的上传和下载
一、文件的上传
实现方式:主要是以form表单提交的形式进行
使用步骤
1.实现form表单代码如下
注意的是文件上传表单提交方式必须是post,必须是添加enctype="multipart/form-data"属性以及属性值
<form action="uploadFile" method="post" enctype="multipart/form-data">
<!--/uploadFile斜杠可以省略-->
文件:<input type="file" name="file"><br>
<input type="submit" value="上传"><br>
</form>
2.具体的上传servlet实现代码
@WebServlet(value = "/uploadFile")
@MultipartConfig/*这里实现servlet文件上传必须要添加的一个注解语*/
/*上传文件注解,一个类可以拥有多个注解*/
public class UploadServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*设置请求字符集编码,防止文件上传成功后的中文文件名出现乱码现象*/
request.setCharacterEncoding("utf-8");
/*获取上传文件框对象*/
Part file = request.getPart("file");//这里的getPart()方法中的参数名,必须是与form表单下的input标签中的name属性名一致
/*获取上传文件名称*/
String fileName = file.getSubmittedFileName();
System.out.println("上传文件名称:" + fileName);
//上传文件类型
String contentType = file.getContentType();
System.out.println("文件类型:" + contentType);
//获取上传文件大小
long size = file.getSize();
System.out.println("文件大小:" + size);
//获取上传文件输入流
InputStream fis = file.getInputStream();
/*服务器用来存放上传文件的绝对路径*/
String realPath = request.getServletContext().getRealPath("/upload/");
File path=new File(realPath);//这里是为了保证上传的文件能够在指定的服务器文件夹下的目录
if (!path.exists()){//保证指定的路径文件目录下上传,创建指定的目录,避免了文件上传路径出错,会上传到与upload目录同级的路径下
path.mkdir();
}
System.out.println("path = " + path);
File f=new File(path,fileName);
/*创建输出流对象*/
FileOutputStream fos=new FileOutputStream(f);
byte[] bytes = new byte[1024];//字节存储缓冲字节流
int len;
/*while循环实现字节流的读取工作*/
while ((len=fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//关闭流
fis.close();
fos.close();
}
}
二、文件的下载
主要是以a标签的请求到项目下的指定servlet路径格式进行访问
使用步骤
1、实现form表单代码如下
<a href="downloadFile?fileName=01.png">01.png</a><br>//其中的downloadFile是指定的待处理的servlet注释路径名字,fileName是指定的参数下载文件
<a href="downloadFile?fileName=02.png">02.png</a><br>
2、具体的下载servlet实现代码
@WebServlet(value = "/downloadFile")
public class DownloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*获取下载文件存放路径*/
String realPath = request.getServletContext().getRealPath("/upload/");
/*获取下载的文件名称*/
String file=request.getParameter("fileName");//这里的getParameter()方法参数需要与form表单的a标签的路径后的参数名一致
/*打开下载文件输入流*/
File file1 = new File(realPath,file);
FileInputStream fis=new FileInputStream(file1);
/*设置响应头,下载文件附加格式,其中的URLEncoder.encode(file,"utf-8")是下载完成后文件名不会出现错误现象*/
response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(file,"utf-8"));
/*打开文件输出流*/
ServletOutputStream os = response.getOutputStream();
/*循环读取文件*/
byte[] bytes = new byte[1024];
int len;
while ((len=fis.read(bytes))!=-1){
os.write(bytes,0,len);
}
/*关闭流*/
fis.close();
os.close();
}
}
总结
servlet实现文件的上传和下载都需要打开输入输出流进行对文件的传输操作