html form中Enctype=multipart/form-data的有什么用

时间:2017-10-26
在表单form中,我们经常会看到表单有这个属性Enctype,并且其值设置为multipart/form-data,这个属性和值到底是取什么作用的呢?本文章和大家一起探讨html form中的Enctype属性,需要的朋友可以参考一下。

Enctype是什么?

enctype这个属性管理的是表单的MIME编码。共有三个值可选:

  1. application/x-www-form-urlencoded
  2. multipart/form-data
  3. text/plain

 其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码,而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或是是mp3等等。text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型,否则会出现接收时编码混乱的问题。

form设置了enctype="multipart/form-data" 属性后,就是2进制传输数据了。

解决当FORM的ENCTYPE=multipartform-data 时取不到值

在开发一个MIS系统中,部分页面中有需要上传文件的字段,相信大家在开发中也经常遇到这样的情况.因为要上传文件,所以FORM标记中的ENCTYPE="multipart/form-data",可是这样的话,当你在servlet里面用request.getParameter()方法无论如何都只是获得null值,解决方法如下:

用jspsmartupload组件实现文件上传的,这个方法是我使用的方法,所以把主要代码贴了出来 

SmartUpload upload = new SmartUpload();  
     try{  
    upload.initialize(config, request, response);  
    // 允许上传的文件类型  
    upload.setAllowedFilesList("doc,xls,");  
    // 拒绝上传的文件类型  
    upload.setDeniedFilesList("exe,bat,jsp");  
    // 允许上传文件的单个最大大小  
    upload.setMaxFileSize(1024 * 1024 * 20);  
    // 允许上传文件的最大大小总和  
    // upload.setTotalMaxFileSize(1024*1024*10);  
    //上传数据  
    upload.upload();  
    }  
    catch (SmartUploadException e){  
        e.printStackTrace();  
        return;  
    }  
  
    Request req = upload.getRequest();  
    String spid=(String)req.getParameter("teacherId");  
         //.....  
         //To do something  

这样就可以取得对应的值了. 

form enctype="multipart/form-data"中文乱码

在web开发时,我们可能会为其添加上传图片的功能,在form表单上传图片的同时,我们也会在其中添加一些信息,比如id,图片简介什么的,当使用到了中文时,也许会产生乱码问题。问题的原因可以归结为以下几点

servlet 中是否有request.setCharacterEncoding("UTF-8");没有就需要加上。

项目的编码格式是否是“GBK”,如果不是的话,也需要将其修改为“GBK

修改了以上的小问题的话,大问题就基本解决了