JavaWeb 文件的上传下载介绍
文件的上传介绍
1.要有一个form标签,method=post请求
2.form标签的enctype属性值必须为multipart/from-data值
3.在form标签中使用 input type=file 来添加上传的文件
4.编写服务器代码(servlet)接收,处理上传的数据。
encType=multipart /form-data表示提交的数据,以多端(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器。

后台Servlet以流的形式接收数据
public class UploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("file upload"); File file = new File("getUploadFile.txt"); ServletInputStream inputStream = req.getInputStream(); byte[] buffer = new byte[10240000]; int read = inputStream.read(buffer); String s = new String(buffer, 0, read); System.out.println(s); } }
解析接收到的数据,使用commons-fileupload.jar 和commons-io.jar
ServletFileUpload类
FileItem类
public class UploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //先判断上传的数据是否是多段的数据(只有多段的数据,才是文件上传的) if(ServletFileUpload.isMultipartContent(req)){ //创建FileItemFactory工厂实现类 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); //创建用于解析上传数据的工具类ServletFileUpload类 ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); try{ //解析上传的数据,得到每一个表单项FileItem List<FileItem> fileItems = servletFileUpload.parseRequest(req); for(FileItem fileItem:fileItems){ if(fileItem.isFormField()){ //普通表单项 System.out.println("表单项的name属性值:" + fileItem.getFieldName()); //参数UTF-8解决乱码问题 System.out.println("表单项的value属性值:" + fileItem.getString()); }else{ //表单的上传文件 System.out.println("表单项的name属性值:" + fileItem.getFieldName()); System.out.println("上传的文件名:" + fileItem.getName()); fileItem.write(new File("/Users/lye/Desktop/" + fileItem.getName())); } } }catch (Exception e){ e.printStackTrace(); } } } }
文件的下载
步骤:
1.获取要下载的文件名
2.读取要下载的文件内容
3.把下载的文件内容回传给客户端
4.在回传前,通过响应头告诉客户端返回的数据类型
5.还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
public class DownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取要下载的文件名 String downloadFileName = "vengo.jpeg"; //2.读取要下载的文件内容(通过ServletContext对象可以读取) ServletContext servletContext = getServletContext(); //获取要下载的文件类型 String mimeType = servletContext.getMimeType("/" + downloadFileName); System.out.println(mimeType); //4.在回传前,通过响应头告诉客户端返回的数据类型 resp.setContentType(mimeType); //5.还要告诉客户端收到的数据是用于下载使用(还是使用响应头) resp.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode("汉字","UTF-8")); InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName); OutputStream outputStream = resp.getOutputStream(); //3.把下载的文件内容回传给客户端 //读取输入流中全部的数据,复制给输出流,输出给客户端 IOUtils.copy(resourceAsStream,outputStream); } }
使用URLEncoder来解决中文下载名乱码的问题。
Base64编解码
public class Base64Test { public static void main(String[] args) throws IOException { String content = "这是需要base64编码的内容"; //创建一个base64编码器 BASE64Encoder base64Encoder = new BASE64Encoder(); //执行Base64编码操作 String encodeString = base64Encoder.encode(content.getBytes(StandardCharsets.UTF_8)); System.out.println(encodeString); //Base64解码 BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] bytes = base64Decoder.decodeBuffer(encodeString); String s = new String(bytes, "UTF-8"); System.out.println(s); } }

浙公网安备 33010602011771号