JAVA 上传文件的类

如果你要用<input type=file>来上传文件的话,

注意在一个表单中如果enctype="multipart/form-data"属性的话,

是不能接收除type=file外的其他表单元素类型的。

即如果你把<input type=file>和<input type=text">放在同一表单中,

而该表单的enctype="multipart/form-data"的话,

request.getParamter取text的值会为空,

这个问题的最简单的解决方法是将<input type=file>单独放一个表单,

上传文件时只提交该表单即可。 
所以在属性为multipart/form-data的form中别放type为text的input项目,否则将得不到想要的数据值。

 

  1. import java.io.DataInputStream;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import java.io.*;
  8. import java.util.HashMap;
  9. public class UploadFile   {
  10.       public static final int MAX_SIZE = 1024 * 1024*100;
  11.       public static final String FILE_DIR = "d:/temp/";
  12.       private int file_Size=0;
  13.       private String file_Path = "";
  14.       private HashMap hm = new HashMap();
  15.       public String upLoad(HttpServletRequest req) {
  16.           String tmpString ="";
  17.           String result = "";
  18.           DataInputStream dis = null;
  19.           String split_Str = "";
  20.           try {
  21.              dis = new DataInputStream(req.getInputStream());
  22.              String content = req.getContentType();
  23.              if (content != null && content.indexOf("multipart/form-data") != -1) {
  24.                   int reqSize = req.getContentLength();
  25.                 byte[] data = new byte[reqSize];
  26.                 int bytesRead = 0;
  27.                   int totalBytesRead = 0;
  28.                 int sizeCheck = 0;
  29.                  while (totalBytesRead < reqSize) {
  30.                      // check for maximum file size violation
  31.                      sizeCheck = totalBytesRead + dis.available();
  32.                     if (sizeCheck > MAX_SIZE)
  33.                          result = "文件太大不能上传";
  34.                       bytesRead = dis.read(data, totalBytesRead, reqSize);
  35.                      totalBytesRead += bytesRead;
  36.                  }
  37.                  String dataString = null;
  38.                   //dataString = new String(data, "ISO-8859-1");
  39.                  dataString = new String(data);
  40.                  tmpString = new String(data);
  41.                  hm = parseAnotherParam(tmpString);
  42.                 
  43.                  //取出字段分割符
  44.                  split_Str = dataString.substring(0, dataString.indexOf("/r/n"));
  45.                   // 分离filepath 并赋值
  46.                  dataString = dataString.substring(dataString.indexOf("filename=/""));
  47.                   String filePath = dataString.substring(0, dataString.indexOf("Content-Type:"));
  48.                  if (filePath==null && filePath.equals("")) return "";
  49.                  //System.out.println(filePath);
  50.                   dataString = new String(dataString.getBytes(),"ISO-8859-1");
  51.                   // 分离contentType 并赋值
  52.                  dataString = dataString.substring(dataString.indexOf("Content-Type:") + 1);
  53.                  dataString = dataString.substring(dataString.indexOf("/n") + 1);
  54.                   // 分离文件信息 获得最终想要的字节
  55.  //System.out.print("|"+dataString+"|");
  56.                   dataString = dataString.substring(2, dataString.indexOf(split_Str));
  57. //System.out.println("|"+dataString+"|");
  58.                  dataString = dataString.substring(0, dataString.lastIndexOf("/n") - 1);
  59.  //System.out.print("|"+dataString+"|");
  60.                   if (writeFile(dataString.getBytes("ISO-8859-1"), FILE_DIR + getFileName(filePath))) {
  61.                       this.file_Size = dataString.getBytes("ISO-8859-1").length;
  62.                       this.file_Path = FILE_DIR + getFileName(filePath);
  63.                       result = "文件上传完毕";
  64.                  } else {
  65.                       result = "文件上传失败";
  66.                  }
  67.              } else {
  68.                   result = "content 必须为 multipart/form-data";
  69.               }
  70.           } catch (UnsupportedEncodingException ex4) {
  71.               result = "getBytes 失败 UnsupportedEncodingException错误";
  72.           } catch (NullPointerException e) {
  73.               result = "getBytes 失败 NullPointerException错误";
  74.           } catch (IOException ex1) {
  75.               result = "IOException 错误 ";
  76.           }
  77.           return result;
  78.       }
  79.       public String getFilePath(){
  80.           return this.file_Path;
  81.      }
  82.       public int getFileSize(){
  83.           return this.file_Size;
  84.       }
  85.       public boolean writeFile(byte[] data, String path) {
  86.           File f = null;
  87.           FileOutputStream fos = null;
  88.           try {
  89.               f = new File(path);
  90.               f.createNewFile();
  91.              fos = new FileOutputStream(f);
  92.               fos.write(data, 0, data.length);
  93.           } catch (FileNotFoundException e) {
  94.               return false;
  95.           } catch (IOException e) {
  96.               return false;
  97.           } finally {
  98.               try {
  99.                   fos.close();
  100.               } catch (IOException e) {
  101.                   return false;
  102.               }
  103.           }
  104.           return true;
  105.       }
  106.       public String getFileName(String arg) {
  107.           String path = "";
  108.           if (arg.indexOf("/"") > -1)
  109.               path = arg.substring(arg.indexOf("/"") + 1, arg.lastIndexOf("/""));
  110.           else
  111.               path = arg;
  112.       //System.out.println("file_path:"+arg);
  113.           path = path.substring(path.lastIndexOf("//") + 1);
  114.           return path;
  115.       }
  116.       public HashMap parseAnotherParam(String str){
  117.         HashMap hm= new HashMap();
  118.         String key="";
  119.         String value="";
  120.         int startindex = 0;
  121.         int endindex = 0;
  122.         startindex = str.indexOf("Content-Disposition: form-data; name=/"") + "Content-Disposition: form-data; name=/"".length();
  123.         endindex = str.indexOf("/"/r/n/r/n");
  124.         while ( startindex >-1 && endindex > -1 ){
  125.           key = str.substring(startindex, endindex);
  126.           if(!str.substring(endindex , endindex + 5).equals("/"/r/n/r/n")   ){//去掉没有value的元素
  127.               str = str.substring(endindex);
  128.               startindex = str.indexOf("Content-Disposition: form-data; name=/"") + "Content-Disposition: form-data; name=/"".length();
  129.               endindex = str.indexOf("/"/r/n/r/n");
  130.               continue;
  131.           }
  132.           if( key.indexOf("/";") > -1){//去掉上传文件的参数以及编码
  133.             str = str.substring(str.indexOf("/";") + 2);
  134.              startindex = str.indexOf("Content-Disposition: form-data; name=/"") + "Content-Disposition: form-data; name=/"".length();
  135.              endindex = str.indexOf("/"/r/n/r/n");
  136.              continue;
  137.           } else
  138.               str = str.substring(endindex + 5);
  139.           value = str.substring(0, str.indexOf("/r/n"));
  140.           str = str.substring(str.indexOf("/r/n") + 2);
  141.           //System.out.println("key:"+key+" value:"+value);
  142.           hm.put(key,value);
  143.           startindex = str.indexOf("Content-Disposition: form-data; name=/"") + "Content-Disposition: form-data; name=/"".length();
  144.           endindex = str.indexOf("/"/r/n/r/n");
  145.         }
  146.         return hm;
  147.       }
  148.       public String getParameter(String param){
  149.           //System.out.println(hm.toString());
  150.        return (String)hm.get(param);
  151.       }
  152.  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值