分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

文件上传

发布时间:2023-09-06 02:00责任编辑:董明明关键词:文件上传

  文件的上传主要有两种协议:http、ftp。一般来说,我们使用ftp传输大文件,用http传输小文件。除了大小之分外,http因为自身的无状态请求限制,上传文件请求只能从客户端发起,服务端处理,而ftp是双通道交互的,也就是客户端和服务端都能互相上传。

  1、http上传文件

  http上传文件使用的是post方式,并需要将编码方式 enctype 设置为 multipart/form-data。假如现在有这么一个表单:

<form action="upload" method="post" enctype="multipart/form-data"> ?<input type="text" name="description" placeholder="上传文件" /> ?<input type="file" name="uploadFile" /> ?<input type="submit" /></form>

  点击submit后,客户端将上传文件请求消息通过二进制流传输到服务器。服务器怎么处理呢?如果是Servlet 3.0 以前的版本, 需使用 Apache的ommons FileUpload,有两个jar需要引入:commons-fileupload.jar、commons-io.jar。Apache封装了大部分操作,只需简单调用它的方法即可:

protected void doPost(HttpServletRequest request, HttpServletResponse response) ???????throws ServletException, IOException ???{ ???????try ???????{ ???????????// 1、创建一个DiskFileItemFactory工厂, 用来配置对上传文件的限制 ???????????DiskFileItemFactory factory = new DiskFileItemFactory(); ???????????// 2、创建一个文件上传解析器 ???????????ServletFileUpload uploader = new ServletFileUpload(factory); ???????????????????????// 3、调用 parseRequest 方法, 将 multipart 所有的数据封装到 list 中 ???????????List<FileItem> items = uploader.parseRequest(request); ???????????????????????// 4、循环处理 ???????????for (FileItem item : items) ???????????{ ???????????????if (item.isFormField()) ???????????????{ // 处理普通字段 (input type="text|radio|checkbox|etc", select, 等). ???????????????????String fieldName = item.getFieldName(); ???????????????????String fieldValue = item.getString(); ???????????????????// ... (其他操作) ???????????????} ???????????????else ???????????????{ // 处理文件数据 (input type="file"). ???????????????????String fieldName = item.getFieldName(); ???????????????????// 如果是上传文件,显示文件名 ???????????????????String fileName = FilenameUtils.getName(item.getName()); ???????????????} ???????????} ???????} ???????catch (FileUploadException e) ???????{ ???????????throw new ServletException("解析文件出错.", e); ???????} ???????????}

  如果是Servlet 3.0以上的版本,直接使用内置的MultiPart API即可:

@WebServlet("/upload")@MultipartConfigpublic class UploadServlet extends HttpServlet{ ???protected void doPost(HttpServletRequest request, HttpServletResponse response) ???????throws ServletException, IOException ???{ ???????Part part = request.getPart("uploadFile"); ???????????????// 常用属性 ???????System.out.printf( ???????????"Part 对象属性方法:\n> Name: %s\n> Size: %d\n> ContentType: %s\n> getSubmittedFileName: %s\n> HeaderNames: %s\n> disposition: %s\n", ???????????part.getName(), ???????????part.getSize(), ???????????part.getContentType(), ???????????part.getSubmittedFileName(), ???????????part.getHeaderNames(), ???????????part.getHeader("content-disposition")); ???????????????// 得到文件名 ???????String fileName = part.getSubmittedFileName(); ???}}

  2、ftp上传文件

  服务主要是为了在两台计算机之间实现文件的上传与下载,一台计算机作为ftp客户端,另一台计算机作ftp服务端。ftp上传文件有两点要注意:一是登录方式有两种,分匿名登录和授权用户名与密码登录;二是应用模式有主动和被动。

文件上传

原文地址:https://www.cnblogs.com/wuxun1997/p/9210880.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved