Android(java)学习笔记214:开源框架的文件上传(只能使用Post)

1.文件上传给服务器,服务器端必然要写代码进行支持,如下:

我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Apache给我们提供了完善的框架,我们只要引入commons-fileupload-1.2.2.jar  和  commons-io-2.0.1.jar就可以使用这个Apache给我们封装好的框架,这两个jar放到如下目录下:

WebContent/WEB-INF/lib/

引入jar包之后,接下来我们新建一个Servlet程序,命名为"UploadServlet.java",整个工程如下图:

2.PC端上传数据到服务器:

编写服务器端代码UploadServlet.java代码:

 1 package com.himi.web;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.List;
 6
 7 import javax.servlet.ServletException;
 8 import javax.servlet.annotation.WebServlet;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.apache.commons.fileupload.FileItem;
14 import org.apache.commons.fileupload.FileItemFactory;
15 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
16 import org.apache.commons.fileupload.servlet.ServletFileUpload;
17
18 /**
19  * Servlet implementation class UploadServlet
20  */
21 @WebServlet("/UploadServlet")
22 public class UploadServlet extends HttpServlet {
23     private static final long serialVersionUID = 1L;
24
25     /**
26      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
27      */
28     protected void doPost(HttpServletRequest request,
29             HttpServletResponse response) throws ServletException, IOException {
30         // 判断上传数据是否包含文件,true--包含文件,false--不包含文件
31         boolean isMultipart = ServletFileUpload.isMultipartContent(request);
32         //如果上传数据包含文件
33         if (isMultipart) {
34             //获取servlet上下文真实的路径
35             String realpath = request.getSession().getServletContext()
36                     .getRealPath("/files");
37             //打印servlet上下文真实的路径给用户观察
38             System.out.println(realpath);
39             File dir = new File(realpath);
40             if (!dir.exists())
41                 dir.mkdirs();
42             FileItemFactory factory = new DiskFileItemFactory();
43             ServletFileUpload upload = new ServletFileUpload(factory);
44             upload.setHeaderEncoding("UTF-8");
45             try {
46                 //工具类ServletFileUpload解析我们的http的post请求的参数数据,解析结果赋给一个List集合
47                 //List集合中是我们form(jsp)标签中我们的每个input节点的数据
48                 List<FileItem> items = upload.parseRequest(request);
49                 for (FileItem item : items) {
50                     //如果是一个普通的表单
51                     if (item.isFormField()) {
52                         String name1 = item.getFieldName();// 得到请求参数的名称
53                         String value = item.getString("UTF-8");// 得到参数值
54                         System.out.println(name1 + "=" + value);
55                     } else {//如果里面有文件数据,就把文件写到当前servlet上下文真实路径里面,文件名称是以系统事件命名的
56                         item.write(new File(dir, System.currentTimeMillis()
57                                 + item.getName().substring(
58                                         item.getName().lastIndexOf("."))));
59                     }
60                 }
61             } catch (Exception e) {
62                 e.printStackTrace();
63             }
64         }
65     }
66
67 }

同时我们还要编写FileUpload.jsp代码如下:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 2 <html>
 3 <head>
 4 <%@ page language="java" contentType="text/html; charset=utf-8"
 5     pageEncoding="utf-8"%>
 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 7 <title>???????</title>
 8 </head>
 9 <body>
10
11 <form action="UploadServlet" method="post" enctype="multipart/form-data">
12       请选择文件上传<input type="file" name="file"> <br>
13       <input type="submit" value="提交"> <br>
14 </form>
15
16 </body>
17 </html>

运行FileUpload.jsp动态页面在Tomcat服务器上,显示效果如下:

复制路径http://localhost:8080/web/FileUpload.jsp到360浏览器上,如下:

这里我们选择文件为桌面上的一个 心得.txt ,我们提交之后,观察浏览器 和 服务器反应,如下:

浏览器的反应:

服务器的反应:

追溯到这个打印出来的路径,我们找到了我们上传的文件,如下:

打开文件,文件内容是对的。

到这里说明PC到服务器端的文件上传是没有问题的。

时间: 2024-10-08 11:16:12

Android(java)学习笔记214:开源框架的文件上传(只能使用Post)的相关文章

JSP学习笔记(四):文件上传

JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档.我们使用 Servlet 来处理文件上传,使用到的文件有: upload.jsp : 文件上传表单. message.jsp : 上传成功后跳转页面. UploadServlet.java : 上传处理 Servlet. 需要引入的 jar 文件:commons-fileupload-1.3.2.commons-io-2.5.jar. 结构如下所示: 1.创建一个文件上传表

《白帽子讲WEB安全》学习笔记之第8章 文件上传漏洞

第8章 文件上传漏洞 8.1 文件上传漏洞概述 文件上传漏洞是指用户上传一个可执行的脚本文件,并通过此脚本文件活动执行服务器端的能力. 原理:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件. 文件上传漏洞安全问题: q  上传文件是WEB脚本文件,服务器的WEB服务器解释并执行了用户上传的脚本,导致代码执行: q  上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行

笨鸟先飞之Java(一)--使用struts2框架实现文件上传和下载

不管是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个常用功能会有很多种解决方式,但是struts2的框架却能给我们一个比较简单的方式,下面就一起来看吧: 文件上传: 首先来看实现上传功能的表单,Index.jsp: <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType=&q

笨鸟先飞之Java(一)--使用struts2框架实现文件上传

无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: 文件上传: 首先来看实现上传功能的表单.Index.jsp: <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType

关于我使用spring mvc框架做文件上传时遇到的问题

非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题1:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: org.apache.catalin

Grails笔记三:完整的文件上传实例

文件上传在web应用中是比较普遍的,相对于使用jsp等技术实现文件上传,Grails的文件上传着实让人喜爱,因为极其简单,让人看一遍就容易轻松记住!不多说,实例如下: 1.在gsp页面中使用Grails标签uploadForm <g:uploadForm name="myUpload" action="saveFile"> <input type="file" name="myFile" /> <

springboot框架,文件上传问题===org.springframework.web.HttpMediaTypeNotSupportedException: Content type &#39;multipart/form-data;

使用IDEA开发springboot项目,需求中要提交数据项和文件上传,同时接收实体bean对象和文件,后台Controller接收配置方式: Controller代码如下: 1 @RequestMapping(value="/comment",method = RequestMethod.POST) 2 public @ResponseBody RetResult saveIndustryComment(HttpServletRequest request,@RequestParam

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对

Web 在线文件管理器学习笔记与总结(19)上传文件

dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','png','gif','txt'),$maxSize = 10487560){ //判断错误号 if($fileInfo['error'] == 0){ //文件是否是http上传上来的 if(is_uploaded_file($fileInfo['tmp_name'])){ $uniqid = md