`
jinyanliang
  • 浏览: 303754 次
  • 性别: Icon_minigender_1
  • 来自: 河南开封
社区版块
存档分类
最新评论

http请求 ---- 文件上传工具

 
阅读更多
Java代码 
public class FormFile {   
     // 上传文件的数据   
     private byte[] data;   
  
    private InputStream inStream;   
  
   // 文件名称   
   private String filename;   
    // 表单名称   
    private String formname;   
    // 内容类型   
   private String contentType = "application/octet-stream";   
  
   public FormFile(String filename, byte[] data, String formname,   
            String contentType) {   
        this.data = data;   
       this.filename = filename;   
        this.formname = formname;   
        if (contentType != null) {   
            this.contentType = contentType;   
        }   
    }   
  
  public FormFile(String filename, InputStream inStream, String formname,   
            String contentType) {   
       this.filename = filename;   
       this.formname = formname;   
        this.inStream = inStream;   
        if (contentType != null) {   
            this.contentType = contentType;   
        }   
   }   
  
    public byte[] getData() {   
        return data;   
    }   
  
    public void setData(byte[] data) {   
       this.data = data;   
    }   
  
    public InputStream getInStream() {   
        return inStream;   
    }   
  
    public void setInStream(InputStream inStream) {   
        this.inStream = inStream;   
    }   
  
   public String getFilename() {   
       return filename;   
   }   
  
    public void setFilename(String filename) {   
        this.filename = filename;   
    }   
  
    public String getFormname() {   
        return formname;   
    }   
  
    public void setFormname(String formname) {   
        this.formname = formname;   
    }   
  
    public String getContentType() {   
        return contentType;   
    }   
  
   public void setContentType(String contentType) {   
        this.contentType = contentType;   
    }   
}  
 public class FormFile {
      // 上传文件的数据
      private byte[] data;
 
     private InputStream inStream;

    // 文件名称
    private String filename;
     // 表单名称
     private String formname;
     // 内容类型
    private String contentType = "application/octet-stream";
 
    public FormFile(String filename, byte[] data, String formname,
             String contentType) {
         this.data = data;
        this.filename = filename;
         this.formname = formname;
         if (contentType != null) {
             this.contentType = contentType;
         }
     }
 
   public FormFile(String filename, InputStream inStream, String formname,
             String contentType) {
        this.filename = filename;
        this.formname = formname;
         this.inStream = inStream;
         if (contentType != null) {
             this.contentType = contentType;
         }
    }
 
     public byte[] getData() {
         return data;
     }
 
     public void setData(byte[] data) {
        this.data = data;
     }

     public InputStream getInStream() {
         return inStream;
     }

     public void setInStream(InputStream inStream) {
         this.inStream = inStream;
     }
 
    public String getFilename() {
        return filename;
    }
 
     public void setFilename(String filename) {
         this.filename = filename;
     }
 
     public String getFormname() {
         return formname;
     }

     public void setFormname(String formname) {
         this.formname = formname;
     }
 
     public String getContentType() {
         return contentType;
     }

    public void setContentType(String contentType) {
         this.contentType = contentType;
     }
 } 



Java代码 
public class HttpUploadRequester {   
    /**  
     * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能: <FORM METHOD=POST  
    * ACTION="http://192.168.0.200:8080/ssi/fileload/test.do"  
      * enctype="multipart/form-data"> <INPUT TYPE="text" NAME="name"> <INPUT  
      * TYPE="text" NAME="id"> <input type="file" name="imagefile"/> <input  
      * type="file" name="zip"/> </FORM>  
    *   
     * @param actionUrl  
      *            上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,  
       *            你可以使用http://192.168.1.10:8080这样的路径测试)  
       * @param params  
      *            请求参数 key为参数名,value为参数值  
       * @param file  
       *            上传文件  
       */  
      // http协议中分割符,随便定义   
      private static final String HTTP_BOUNDARY = "---------9dx5a2d578c2";   
      private static final String MULTIPART_FORM_DATA = "multipart/form-data";   
      private static final String LINE_ENTER = "\r\n"; // 换行 回车   
      private static final int RESPONSE_OK = 200;   
    
      public static String post(String urlPath, Map<String, String> params,   
             FormFile[] formFiles) {   
         try {   
              URL url = new URL(urlPath);   
              HttpURLConnection conn = (HttpURLConnection) url.openConnection();   
              conn.setRequestMethod("POST");   
              conn.setReadTimeout(5 * 1000);   
              conn.setDoOutput(true); // 发送POST请求, 必须设置允许输出   
              conn.setUseCaches(false);   
             conn.setRequestProperty("Connection", "Keep-Alive"); // 维持长链接   
             conn.setRequestProperty("Charset", "UTF-8");   
             conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA   
                     + "; boundary=" + HTTP_BOUNDARY);   
  
            StringBuilder formItemData = new StringBuilder();   
             // 构建 表单字段内容   
           for (Map.Entry<String, String> entry : params.entrySet()) {   
                 formItemData.append("--");   
                 formItemData.append(HTTP_BOUNDARY);   
                 formItemData.append(LINE_ENTER);   
                formItemData.append("Content-Disposition: form-data; name=\""  
                       + entry.getKey() + "\"\r\n\r\n");   
                 formItemData.append(entry.getValue());   
                 formItemData.append(LINE_ENTER);   
            }   
             DataOutputStream outStream = new DataOutputStream(   
                   conn.getOutputStream());   
            // 发送表单字段内容到服务器   
             outStream.write(formItemData.toString().getBytes());   
    
             // 发送上传文件数据   
           for (FormFile fileData : formFiles) {   
                 StringBuilder fileSplit = new StringBuilder();   
                 fileSplit.append("--");   
                 fileSplit.append(HTTP_BOUNDARY);   
                 fileSplit.append(LINE_ENTER);   
                fileSplit.append("Content-Disposition: form-data;name=\""  
                        + fileData.getFormname() + "\";filename=\""  
                        + fileData.getFilename() + "\"\r\n");   
                fileSplit.append("Content-Type:" + fileData.getContentType()   
                         + LINE_ENTER + LINE_ENTER);   
                 outStream.write(fileSplit.toString().getBytes());   
  
                 if (fileData.getInStream() != null) {   
                     byte[] buffer = new byte[1024];   
                     int length = 0;   
                     while ((length = fileData.getInStream().read()) != -1) {   
                        outStream.write(buffer, 0, length);   
                     }   
                    fileData.getInStream().close();   
               } else {   
                     outStream.write(fileData.getData(), 0,   
                             fileData.getData().length);   
                 }   
                 outStream.write(LINE_ENTER.getBytes());   
             }   
             // 数据结束标志   
            byte[] endData = ("--" + HTTP_BOUNDARY + "--" + LINE_ENTER)   
                     .getBytes();   
            outStream.write(endData);   
             outStream.flush();   
             outStream.close();   
            int responseCode = conn.getResponseCode();   
             if (responseCode != RESPONSE_OK) {   
               throw new RuntimeException("请求url失败");   
             }   
             InputStream is = conn.getInputStream();   
             int ch;   
             StringBuilder b = new StringBuilder();   
            while ((ch = is.read()) != -1) {   
                 b.append((char) ch);   
           }   
            Log.i("HttpPost", b.toString());   
             conn.disconnect();   
             return b.toString();   
        } catch (Exception e) {   
            throw new RuntimeException();   
       }   
     }   
    
   // 上传单个文件   
   public static String post(String urlPath, Map<String, String> params,   
             FormFile formFiles) {   
         return post(urlPath, params, new FormFile[] { formFiles });   
     }   
}  

 public class HttpUploadRequester {
    /**
     * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能: <FORM METHOD=POST
    * ACTION="http://192.168.0.200:8080/ssi/fileload/test.do"
      * enctype="multipart/form-data"> <INPUT TYPE="text" NAME="name"> <INPUT
      * TYPE="text" NAME="id"> <input type="file" name="imagefile"/> <input
      * type="file" name="zip"/> </FORM>
    * 
     * @param actionUrl
      *            上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,
       *            你可以使用http://192.168.1.10:8080这样的路径测试)
       * @param params
      *            请求参数 key为参数名,value为参数值
       * @param file
       *            上传文件
       */
      // http协议中分割符,随便定义
      private static final String HTTP_BOUNDARY = "---------9dx5a2d578c2";
      private static final String MULTIPART_FORM_DATA = "multipart/form-data";
      private static final String LINE_ENTER = "\r\n"; // 换行 回车
      private static final int RESPONSE_OK = 200;
 
      public static String post(String urlPath, Map<String, String> params,
             FormFile[] formFiles) {
         try {
              URL url = new URL(urlPath);
              HttpURLConnection conn = (HttpURLConnection) url.openConnection();
              conn.setRequestMethod("POST");
              conn.setReadTimeout(5 * 1000);
              conn.setDoOutput(true); // 发送POST请求, 必须设置允许输出
              conn.setUseCaches(false);
             conn.setRequestProperty("Connection", "Keep-Alive"); // 维持长链接
             conn.setRequestProperty("Charset", "UTF-8");
             conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA
                     + "; boundary=" + HTTP_BOUNDARY);

            StringBuilder formItemData = new StringBuilder();
             // 构建 表单字段内容
           for (Map.Entry<String, String> entry : params.entrySet()) {
                 formItemData.append("--");
                 formItemData.append(HTTP_BOUNDARY);
                 formItemData.append(LINE_ENTER);
                formItemData.append("Content-Disposition: form-data; name=\""
                       + entry.getKey() + "\"\r\n\r\n");
                 formItemData.append(entry.getValue());
                 formItemData.append(LINE_ENTER);
            }
             DataOutputStream outStream = new DataOutputStream(
                   conn.getOutputStream());
            // 发送表单字段内容到服务器
             outStream.write(formItemData.toString().getBytes());
 
             // 发送上传文件数据
           for (FormFile fileData : formFiles) {
                 StringBuilder fileSplit = new StringBuilder();
                 fileSplit.append("--");
                 fileSplit.append(HTTP_BOUNDARY);
                 fileSplit.append(LINE_ENTER);
                fileSplit.append("Content-Disposition: form-data;name=\""
                        + fileData.getFormname() + "\";filename=\""
                        + fileData.getFilename() + "\"\r\n");
                fileSplit.append("Content-Type:" + fileData.getContentType()
                         + LINE_ENTER + LINE_ENTER);
                 outStream.write(fileSplit.toString().getBytes());

                 if (fileData.getInStream() != null) {
                     byte[] buffer = new byte[1024];
                     int length = 0;
                     while ((length = fileData.getInStream().read()) != -1) {
                        outStream.write(buffer, 0, length);
                     }
                    fileData.getInStream().close();
               } else {
                     outStream.write(fileData.getData(), 0,
                             fileData.getData().length);
                 }
                 outStream.write(LINE_ENTER.getBytes());
             }
             // 数据结束标志
            byte[] endData = ("--" + HTTP_BOUNDARY + "--" + LINE_ENTER)
                     .getBytes();
            outStream.write(endData);
             outStream.flush();
             outStream.close();
            int responseCode = conn.getResponseCode();
             if (responseCode != RESPONSE_OK) {
               throw new RuntimeException("请求url失败");
             }
             InputStream is = conn.getInputStream();
             int ch;
             StringBuilder b = new StringBuilder();
            while ((ch = is.read()) != -1) {
                 b.append((char) ch);
           }
            Log.i("HttpPost", b.toString());
             conn.disconnect();
             return b.toString();
        } catch (Exception e) {
            throw new RuntimeException();
       }
     }
 
   // 上传单个文件
   public static String post(String urlPath, Map<String, String> params,
             FormFile formFiles) {
         return post(urlPath, params, new FormFile[] { formFiles });
     }
} 
Java代码  
// 以表单方式发送请求   
  
        public static void sendDataToServerByForm() throws Exception {   
  
                    Map<String, String> params = new HashMap<String, String>();   
  
                params.put("method", "sendDataByForm");   
  
                  params.put("strData", "字符串数据");   
  
                   // 获取SDCard中的good.jpg   
  
                   File file = new File(Environment.getExternalStorageDirectory(),   
  
                                     "app_Goog_Android_w.png");   
  
                   FormFile fileData = new FormFile("app_Goog_Android_w.png", new FileInputStream(file),   
  
                                   "fileData", "application/octet-stream");   
  
                  HttpUploadRequester.post(   
  
                                    "http://192.168.0.2:8080/AndroidWebServer/server.do", params,   
  
                                     fileData);   
  
         }  


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics