日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

android上传本地图片到服务器上,Android使用post方式上传图片到服务器的方法

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android上传本地图片到服务器上,Android使用post方式上传图片到服务器的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了Android使用post方式上傳圖片到服務器的方法。分享給大家供大家參考,具體如下:

/**

* 上傳文件到服務器類

*

* @author tom

*/

public class UploadUtil {

private static final String TAG = "uploadFile";

private static final int TIME_OUT = 10 * 1000; // 超時時間

private static final String CHARSET = "utf-8"; // 設置編碼

/**

* Android上傳文件到服務端

*

* @param file 需要上傳的文件

* @param RequestURL 請求的rul

* @return 返回響應的內容

*/

public static String uploadFile(File file, String RequestURL) {

String result = null;

String BOUNDARY = UUID.randomUUID().toString(); // 邊界標識 隨機生成

String PREFIX = "--", LINE_END = "\r\n";

String CONTENT_TYPE = "multipart/form-data"; // 內容類型

try {

URL url = new URL(RequestURL);

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);

if (file != 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=\"uploadfile\"; filename=\""

+ file.getName() + "\"" + LINE_END);

sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);

sb.append(LINE_END);

dos.write(sb.toString().getBytes());

InputStream is = new FileInputStream(file);

byte[] bytes = new byte[1024];

int len = 0;

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

dos.write(bytes, 0, len);

}

is.close();

dos.write(LINE_END.getBytes());

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();

dos.write(end_data);

dos.flush();

/**

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

*/

int res = conn.getResponseCode();

Log.e(TAG, "response code:" + res);

// if(res==200)

// {

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);

// }

// else{

// Log.e(TAG, "request error");

// }

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

/**

* 通過拼接的方式構造請求內容,實現參數傳輸以及文件傳輸

*

* @param url Service net address

* @param params text content

* @param files pictures

* @return String result of Service response

* @throws IOException

*/

public static String post(String url, Map params, Map files)

throws IOException {

String BOUNDARY = java.util.UUID.randomUUID().toString();

String PREFIX = "--", LINEND = "\r\n";

String MULTIPART_FROM_DATA = "multipart/form-data";

String CHARSET = "UTF-8";

URL uri = new URL(url);

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("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

// 首先組拼文本類型的參數

StringBuilder sb = new StringBuilder();

for (Map.Entry entry : params.entrySet()) {

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINEND);

sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);

sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);

sb.append("Content-Transfer-Encoding: 8bit" + LINEND);

sb.append(LINEND);

sb.append(entry.getValue());

sb.append(LINEND);

}

DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());

outStream.write(sb.toString().getBytes());

// 發送文件數據

if (files != null)

for (Map.Entry file : files.entrySet()) {

StringBuilder sb1 = new StringBuilder();

sb1.append(PREFIX);

sb1.append(BOUNDARY);

sb1.append(LINEND);

sb1.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""

+ file.getValue().getName() + "\"" + LINEND);

sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);

sb1.append(LINEND);

outStream.write(sb1.toString().getBytes());

InputStream is = new FileInputStream(file.getValue());

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 = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();

outStream.write(end_data);

outStream.flush();

// 得到響應碼

int res = conn.getResponseCode();

InputStream in = conn.getInputStream();

StringBuilder sb2 = new StringBuilder();

if (res == 200) {

int ch;

while ((ch = in.read()) != -1) {

sb2.append((char) ch);

}

}

outStream.close();

conn.disconnect();

return sb2.toString();

}

}

示例調用第二種方式上傳:

final Map params = new HashMap();

params.put("send_userId", String.valueOf(id));

params.put("send_email", address);

params.put("send_name", name);

params.put("receive_email", emails);

final Map files = new HashMap();

files.put("uploadfile", file);

final String request = UploadUtil.post(requestURL, params, files);

希望本文所述對大家Android程序設計有所幫助。

總結

以上是生活随笔為你收集整理的android上传本地图片到服务器上,Android使用post方式上传图片到服务器的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。