天天看點

Httppost上傳

import java.io.bufferedreader;  

import java.io.dataoutputstream;  

import java.io.file;  

import java.io.fileinputstream;  

import java.io.filenotfoundexception;  

import java.io.fileoutputstream;  

import java.io.ioexception;  

import java.io.inputstream;  

import java.io.inputstreamreader;  

import java.io.outputstream;  

import java.net.httpurlconnection;  

import java.net.malformedurlexception;  

import java.net.url;  

import java.nio.charset.charset;  

import android.content.context;  

import android.util.log;  

public class httppost {  

    public static boolean postsdfile(string urlstr, string msg, string filepath  

            ) {  

   final string tag = "uploadfile";  

   final int time_out = 10 * 1000; // 逾時時間  

   final string charset = "utf-8"; // 設定編碼  

//string result = null;  

string boundary = base64.encode(msg);// uuid.randomuuid().tostring(); //邊界辨別  

// 随機生成  

string prefix = "--", line_end = "\r\n";  

string content_type = "multipart/form-data"; // 内容類型  

int res = 0;  

url url;  

inputstream is=null;  

try {  

    url = new url(urlstr);  

httpurlconnection conn = (httpurlconnection) url  

.openconnection();   

conn.setreadtimeout(time_out);  

conn.setconnecttimeout(time_out);  

conn.setdoinput(true); // 允許輸入流  

conn.setdooutput(true); // 允許輸出流  

conn.setusecaches(false); // 不允許使用緩存  

conn.setrequestmethod("post"); // 請求方式  

conn.setrequestproperty("charset", charset); // 設定編碼  

conn.setrequestproperty("connection", "keep-alive");  

conn.setrequestproperty("content-type", content_type  

+ ";boundary=" + boundary);  

file f = new file(filepath);  

if(!f.exists()){  

    string write_str ="此檔案已被删除";      

     try{               

           fileoutputstream fout = new fileoutputstream(f);     

           byte [] bytes = write_str.getbytes();     

           fout.write(bytes);     

           fout.close();     

         }    

          catch(exception e){     

            e.printstacktrace();     

           }      

}  

is = new fileinputstream(f);      

//is = context.openfileinput(filepath);// 打開檔案流  

if (is != null) {  

/** 

* 當檔案不為空,把檔案包裝并且上傳 

*/  

dataoutputstream dos = new dataoutputstream(  

 conn.getoutputstream());  

stringbuffer sb = new stringbuffer();  

sb.append(prefix);  

sb.append(boundary);  

sb.append(line_end);  

* 這裡重點注意: name裡面的值為伺服器端需要key 隻有這個key 才可以得到對應的檔案 

* filename是檔案的名字,包含字尾名的 比如:abc.png 

sb.append("content-disposition: form-data; name=\"uploadedfile\"; filename=\""  

 + base64.encode(filepath) + "\"" + line_end);  

sb.append("content-type: application/octet-stream; charset="  

 + charset + line_end);  

dos.write(sb.tostring().getbytes());  

byte[] bytes = new byte[1024];  

int len = 0;  

while ((len = is.read(bytes)) != -1) {  

dos.write(bytes, 0, len);  

system.out.println("aaaa"+len);  

is.close();  

dos.write(line_end.getbytes());  

byte[] end_data = (prefix + boundary + prefix + line_end)  

 .getbytes();  

dos.write(end_data);  

dos.flush();  

* 擷取響應碼 200=成功 當響應成功,擷取響應的流 

res = conn.getresponsecode();  

log.e(tag, "response code:" + res);  

log.e(tag, "request success");  

inputstream input = conn.getinputstream();  

stringbuffer sb1 = new stringbuffer();  

int ss;  

while ((ss = input.read()) != -1) {  

sb1.append((char) ss);  

//result = sb1.tostring();  

//log.e(tag, "result : " + result);  

} catch (malformedurlexception e) {  

    // todo auto-generated catch block  

    e.printstacktrace();  

} catch (ioexception e1) {  

    e1.printstacktrace();  

if(res == 200){  

return true;}  

else{return false;}  

    public static string postmsg(string pathurl, string msg) {  

        stringbuffer sb = null;  

        sb = new stringbuffer();  

        try {  

            // 建立連接配接  

            url url = new url(pathurl);  

            httpurlconnection httpconn = (httpurlconnection) url.openconnection();  

            //設定連接配接屬性  

            httpconn.setdooutput(true);// 使用 url 連接配接進行輸出  

            httpconn.setdoinput(true);// 使用 url 連接配接進行輸入  

            httpconn.setusecaches(false);// 忽略緩存  

            httpconn.setrequestmethod("post");// 設定url請求方法  

            string requeststring = base64.encode(msg);  

            // 設定請求屬性  

            // 獲得資料位元組資料,請求資料流的編碼,必須和下面伺服器端處理請求流的編碼一緻  

            byte[] requeststringbytes = requeststring.getbytes();  

            httpconn.setrequestproperty("content-length", "" + requeststringbytes.length);  

            httpconn.setrequestproperty("content-type", "application/octet-stream");  

            httpconn.setrequestproperty("connection", "keep-alive");// 維持長連接配接  

            httpconn.setrequestproperty("charset", "utf-8");  

            // 建立輸出流,并寫入資料  

            outputstream outputstream = httpconn.getoutputstream();  

            outputstream.write(requeststringbytes);  

            outputstream.close();  

            //system.out.println("1");  

            // 獲得響應狀态  

            int responsecode = httpconn.getresponsecode();  

            if (httpurlconnection.http_ok == responsecode) {// 連接配接成功  

                // 當正确響應時處理資料  

                string readline;  

                bufferedreader responsereader;  

                // 處理響應流,必須與伺服器響應流輸出的編碼一緻  

                responsereader = new bufferedreader(new inputstreamreader(  

                        httpconn.getinputstream()));  

                while ((readline = responsereader.readline()) != null) {  

                    sb.append(readline).append("\n");  

                }  

                responsereader.close();  

            }  

        } catch (exception ex) {  

            ex.printstacktrace();  

        }     

        return sb.tostring();  

    }  

轉載:http://blog.csdn.net/chaoyu168/article/details/49076149