android http文件上傳工具類

/**
 * util
 */
package com.example.testtcp;


import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;


/**
 * (以HTTP方式上傳) 文件上傳工具類
 * 
 * @author JiaRH
 * 
 * @date 2013-11-30 下午2:33:44
 */
public class Upload_files_util {
/**

* @param actionUrl
*            上傳地址
* @param FileName
*            上傳文件路徑
* @return
* @throws IOException
*/


public static String upload(String actionUrl, String FileName)
throws IOException {
// 產生隨機分隔內容
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
// 定義URL實例
URL uri = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
// 設置從主機讀取數據超時
conn.setReadTimeout(10 * 1000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
// 維持長連接
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charset", "UTF-8");
// 設置文件類型
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
+ ";boundary=" + BOUNDARY);
// 創建一個新的數據輸出流,將數據寫入指定基礎輸出流
DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
// 發送文件數據
if (FileName != null) {
// 構建發送字符串數據
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
+ FileName + "\"" + LINEND);
sb1.append("Content-Type: application/octet-stream;chartset="
+ CHARSET + LINEND);
sb1.append(LINEND);
// 寫入到輸出流中
outStream.write(sb1.toString().getBytes());
// 將文件讀入輸入流中
InputStream is = new FileInputStream(FileName);
byte[] buffer = new byte[1024];
int len = 0;
// 寫入輸出流
while ((len = is.read(buffer)) != -1) {


outStream.write(buffer, 0, len);
}
is.close();
// 添加換行標誌
outStream.write(LINEND.getBytes());
}
// 請求結束標誌
byte[] end_data = (PREFFIX + BOUNDARY + PREFFIX + LINEND).getBytes();
outStream.write(end_data);
// 刷新發送數據
outStream.flush();
// 得到響應碼
int res = conn.getResponseCode();


InputStream in = null;
// 上傳成功返回200
if (res == 200) {
in = conn.getInputStream();
int ch;
StringBuilder sb2 = new StringBuilder();
// 保存數據
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
// 如果數據不爲空,則以字符串方式返回數據,否則返回null
return in == null ? null : in.toString();
};


}


原文地址:http://blog.csdn.net/jiaruihua_blog/article/details/17040819

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章