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