南京北大青鸟

全国咨询电话:15195455103

三分钟了解北大青鸟
当前位置:南京北大青鸟 > 学习园地 > 编程技巧

文件上传的原理

来源:未知      作者:IT教育      发布时间:2012-03-04 10:44:01

一、表单元素的enctype属性 通常情况下无须设置表单元素的enctype属性,表单的enctype属性指定的是表单数据的编码方式,该属性有如下3个值: ◆ application/x-www-form-urlencoded:这是默认的编
一、表单元素的enctype属性
通常情况下无须设置表单元素的enctype属性,表单的enctype属性指定的是表单数据的编码方式,该属性有如下3个值:
◆      application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式
◆      multipart/form-data:这种编码方式会以二进制的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里
◆      text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件的方式
 
下面来看看enctype属性为application/x-www-form-urlencoded和multipart/form-data时的差别

<html>
    <head>
       <title>enctype属性测试</title>
    </head>
    <body>
       <form action="pro.jsp" method="post"
           enctype="application/x-www-form-urlencoded">
           上传文件:
           <input type="file" name="file" /><br />
           请求参数:
           <input type="text" name="info" /><br />
           <input type="submit" value="提交" />
       </form>
    </body>
</html>

 UpdateArticle
注意:application/x-www-form-urlencoded是enctype属性的默认值
提交到的pro.jsp代码如下:
 

<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.io.*"%>
<%
    //获取HTTP请求的输入流
    InputStream is=request.getInputStream();
    //创建缓冲读入流
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    //读取HTTP请求内容
    String buffer=br.readLine();
    while(buffer!=null){
       out.println(buffer);
       buffer=br.readLine();
    }
%>

以上代码通过二进制流来处理HTTP请求——这是一种更底层的处理方式,当通过HttpServletRequest的getParameter方法来获取请求参数时,实际上是Web服务器替我们处理了这种底层的二进制流,并将二进制流转换成对应的请求参数值。
 
请求数据中的文字转码

public class TestURLEncoder {
    public static void main(String[] args)throws Exception {
       String encodeStr="%D0%EC%D6%DD";
       System.out.println(URLDecoder.decode(encodeStr,"GBK"));
      
       String rawStr="北大青鸟";
       System.out.println(URLEncoder.encode(rawStr,"GBK"));
    }
}

 
一般情况下,程序中直接通过HttpServletRequest的getParameter方法即可获得正确的请求参数,而那些底层的二进制流处理,以及使用URLDecoder处理请求参数,都由Web服务器来替我们完成了。
但是做文件上串操作的话,仅仅只能获得文件选择器中数值,而不能获得文件的内容,为了实现文件上传,必须设置enctype属性值为:multipart/form-data

分享到:

相关阅读:

上一篇:没有了

下一篇:DIV+CSS入门之DIV分栏代码

近期文章

抢试听名额

名额仅剩66名

教育改变生活

WE CHANGE LIVES