【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】怎么在Android中使用PostUploadRequest上傳文件

本篇文章給大家分享的是有關(guān)怎么在Android中使用PostUploadRequest上傳文件,在下覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著在下一起來(lái)看看吧。數(shù)據(jù)格式以下為項(xiàng)目中圖片上傳實(shí)例的數(shù)據(jù)格式多張圖片上傳可通過(guò)添加——WebKitFormBoundary內(nèi)容實(shí)現(xiàn)POST

/CloudLife/user/social

HTTP/1.1

Host:

localhost

Connection:

keep-alive

Cache-Control:

max-age=0

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Origin:

http://localhost

User-Agent:

Mozilla/5.0

(Windows

NT

6.3;

WOW64)

AppleWebKit/537.36

(KHTML,

like

Gecko)

Chrome/31.0.1650.63

Safari/537.36

Content-Type:

multipart/form-data;

boundary=WebKitFormBoundaryzayymBT8Owg2UzBR

Referer:

http://localhost/CloudLife/upload.jsp

Accept-Encoding:

gzip,deflate,sdch

Accept-Language:

zh-CN,zh;q=0.8

Cookie:

CLOUD_LIFE=03F21B9A9D9B4FF2BF443290A9CD8E2C;

USER

JSESSIONID=C4AB532929FA43230FA193A98197F962

Content-Length:

12444

WebKitFormBoundaryzayymBT8Owg2UzBR

Content-Disposition:

form-data;

name="text"

發(fā)表的圈子內(nèi)容

WebKitFormBoundaryzayymBT8Owg2UzBR

Content-Disposition:

form-data;

name="file";

filename="這里是文件名"

Content-Type:

image/png

這里空一行

接下來(lái)是二進(jìn)制圖片文件內(nèi)容

WebKitFormBoundaryzayymBT8Owg2UzBR--

這里為空白的一行總共有加上結(jié)尾行,有五行,圖片的二進(jìn)制數(shù),整個(gè)算一行;下面來(lái)分析下:1、第一行:”–”+boundary+“\r\n”;文件上傳在提交數(shù)據(jù)的開(kāi)始標(biāo)志不變;2、第二行:Content-Disposition:form-data;name=”參數(shù)的名稱”;filename=”上傳的文件名”+“\r\n”3、第三行:Content-Type:文件的mime類型+“\r\n”這一行是文件上傳必須要的,而普通的文字提交可有可無(wú),mime類型需要根據(jù)文檔查詢;4、第四行:”\r\n”5、第五行文件的二進(jìn)制數(shù)據(jù)+“\r\n”:結(jié)尾行:”–”+boundary+“–”+“\r\n”可以同時(shí)上傳多個(gè)文件,上傳多個(gè)文件的時(shí)候重復(fù)1、2、3、4、5步,在最后的一個(gè)文件的末尾加上統(tǒng)一的結(jié)束行。上傳的圖像實(shí)體類import

java.io.ByteArrayOutputStream;

import

android.graphics.Bitmap;

/*

*

上傳的圖像實(shí)體類

*

*/

public

class

FormImage

{

//

參數(shù)的名稱

private

String

mName;

//

文件名

private

String

mFileName;

//

文件的

mime,需要根據(jù)文檔查詢

private

String

mMime;

//

需要上傳的圖片資源,因?yàn)檫@里測(cè)試為了方便起見(jiàn),直接把

bitmap

傳進(jìn)來(lái),真正在項(xiàng)目中一般不會(huì)這般做,

//

而是把圖片的路徑傳過(guò)來(lái),在這里對(duì)圖片進(jìn)行二進(jìn)制轉(zhuǎn)換

private

Bitmap

mBitmap

=

null;

public

FormImage(Bitmap

bitmap)

{

this.mBitmap

=

bitmap;

}

public

String

getName()

{

return

"file";

}

public

String

getFileName()

{

return

"add.png";

}

//

對(duì)圖片進(jìn)行二進(jìn)制轉(zhuǎn)換

public

byte[]

getValue()

{

ByteArrayOutputStream

bos

=

new

ByteArrayOutputStream();

mBpress(Bitmap.CompressFormat.JPEG,

80,

bos);

return

bos.toByteArray();

}

//

因?yàn)槲抑朗?/p>

png

文件,所以直接根據(jù)文檔查的

public

String

getMime()

{

return

"image/png";

}

}定制PostUploadRequestimport

java.io.ByteArrayOutputStream;

import

java.io.IOException;

import

java.io.UnsupportedEncodingException;

import

java.util.HashMap;

import

java.util.Map;

import

tocol.HTTP;

import

org.json.JSONException;

import

org.json.JSONObject;

import

com.android.volley.AuthFailureError;

import

com.android.volley.DefaultRetryPolicy;

import

com.android.volley.NetworkResponse;

import

com.android.volley.ParseError;

import

com.android.volley.Request;

import

com.android.volley.Response;

import

com.android.volley.toolbox.HttpHeaderParser;

import

android.util.Log;

/*

*

發(fā)送文件的volley

*

post請(qǐng)求

Cookie

*

*/

public

class

PostUploadRequest

extends

Request<JSONObject>

{

private

Map<String,

String>

sendHeader

=

new

HashMap<String,

String>();

//

正確數(shù)據(jù)的時(shí)候回掉用

private

Response.Listener<JSONObject>

mListener;

//

請(qǐng)求

數(shù)據(jù)通過(guò)參數(shù)的形式傳入

private

String

content;

private

FormImage

mImage;

//

數(shù)據(jù)分隔線

private

String

BOUNDARY

=

"CloudLifeUpLoadImage";

private

String

MULTIPART_FORM_DATA

=

"multipart/form-data";

public

PostUploadRequest(String

url,

String

text,

FormImage

Item,

Response.Listener<JSONObject>

listener,Response.ErrorListener

errorListener)

{

super(Method.POST,

url,

errorListener);

this.mListener

=

listener;

setShouldCache(false);

mImage

=

Item;

content

=

text;

//

設(shè)置請(qǐng)求的響應(yīng)事件,因?yàn)槲募蟼餍枰^長(zhǎng)的時(shí)間,所以在這里加大了,設(shè)為5秒

setRetryPolicy(new

DefaultRetryPolicy(5000,

DefaultRetryPolicy.DEFAULT_MAX_RETRIES,

DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

}

/*

*

這里開(kāi)始解析數(shù)據(jù)

*

@param

response

*

Response

from

the

network

*

@return

*

*/

@Override

protected

Response<JSONObject>

parseNetworkResponse(NetworkResponse

response)

{

try

{

//

防止中文亂碼

@SuppressWarnings("deprecation")

String

jsonString

=

new

String(response.data,

HTTP.UTF_8);

JSONObject

jsonObject

=

new

JSONObject(jsonString);

Log.w("upLoad",

"jsonObject

"

+

jsonObject.toString());

return

Response.success(jsonObject,

HttpHeaderParser.parseCacheHeaders(response));

}

catch

(UnsupportedEncodingException

e)

{

return

Response.error(new

ParseError(e));

}

catch

(JSONException

je)

{

return

Response.error(new

ParseError(je));

}

}

/*

*

回調(diào)正確的數(shù)據(jù)

*

@param

response

*

The

parsed

response

returned

by

*

*/

@Override

protected

void

deliverResponse(JSONObject

response)

{

mListener.onResponse(response);

}

@Override

public

Map<String,

String>

getHeaders()

throws

AuthFailureError

{

return

sendHeader;

}

public

void

setSendCookie(String

cookie)

{

sendHeader.put("Cookie",

cookie);

}

@Override

public

byte[]

getBody()

throws

AuthFailureError

{

ByteArrayOutputStream

bos

=

new

ByteArrayOutputStream();

StringBuffer

sb

=

new

StringBuffer();

if

(content

==

null)

{

/**

*

圖片

*/

/*

第一行

*/

//

`"--"

+

BOUNDARY

+

"\r\n"`

sb.append("--"

+

BOUNDARY

+

"\r\n");

/*

第二行

*/

//

Content-Disposition:

form-data;

name="參數(shù)的名稱";

filename="上傳的文件名"

+

//

"\r\n"

sb.append("Content-Disposition:

form-data;");

sb.append("

name=\"");

sb.append(mImage.getName());

sb.append("\"");

sb.append(";

filename=\"");

sb.append(mImage.getFileName());

sb.append("\"");

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

/*

第三行

*/

//

Content-Type:

文件的

mime

類型

+

"\r\n"

sb.append("Content-Type:

");

sb.append(mImage.getMime());

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

/*

第四行

*/

//

"\r\n"

空白的一行

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

try

{

bos.write(sb.toString().getBytes("utf-8"));

/*

第五行

*/

//

文件的二進(jìn)制數(shù)據(jù)

+

"\r\n"

bos.write(mImage.getValue());

bos.write("\r\n".getBytes("utf-8"));

}

catch

(IOException

e)

{

e.printStackTrace();

}

/*

結(jié)尾行

*/

//

`"--"

+

BOUNDARY

+

"--"

+

"\r\n"`

String

endLine

=

"--"

+

BOUNDARY

+

"--"

+

"\r\n";

try

{

bos.write(endLine.toString().getBytes("utf-8"));

}

catch

(IOException

e)

{

e.printStackTrace();

}

Log.v("upLoad",

"=====formImage====\n"

+

bos.toString());

return

bos.toByteArray();

}

/**

*

文字

*/

/*

第一行

*/

//

`"--"

+

BOUNDARY

+

"\r\n"`

sb.append("--"

+

BOUNDARY

+

"\r\n");

/*

第二行

*/

//

Content-Disposition:

form-data;

name="text"

+

"\r\n"

sb.append("Content-Disposition:

form-data;");

sb.append("

name=\"");

sb.append("text");

sb.append("\"");

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

/*

第三行

*/

//

"\r\n"

空白的一行

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

/*

第四行

*/

//

文本內(nèi)容

sb.append(content);

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

if

(mImage

==

null)

{

/*

結(jié)尾行

*/

//

`"--"

+

BOUNDARY

+

"--"

+

"\r\n"`

String

endLine

=

"--"

+

BOUNDARY

+

"--"

+

"\r\n";

try

{

bos.write(sb.toString().getBytes("utf-8"));

bos.write(endLine.toString().getBytes("utf-8"));

}

catch

(IOException

e)

{

e.printStackTrace();

}

Log.v("upLoad",

"=====formImage====\n"

+

bos.toString());

return

bos.toByteArray();

}

else

{

/**

*

圖片

*/

/*

第一行

*/

//

`"--"

+

BOUNDARY

+

"\r\n"`

sb.append("--"

+

BOUNDARY

+

"\r\n");

/*

第二行

*/

//

Content-Disposition:

form-data;

name="參數(shù)的名稱";

filename="上傳的文件名"

+

//

"\r\n"

sb.append("Content-Disposition:

form-data;");

sb.append("

name=\"");

sb.append(mImage.getName());

sb.append("\"");

sb.append(";

filename=\"");

sb.append(mImage.getFileName());

sb.append("\"");

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

/*

第三行

*/

//

Content-Type:

文件的

mime

類型

+

"\r\n"

sb.append("Content-Type:

");

sb.append(mImage.getMime());

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

/*

第四行

*/

//

"\r\n"

空白的一行

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

try

{

bos.write(sb.toString().getBytes("utf-8"));

/*

第五行

*/

//

文件的二進(jìn)制數(shù)據(jù)

+

"\r\n"

bos.write(mImage.getValue());

bos.write("\r\n".getBytes("utf-8"));

}

catch

(IOException

e)

{

e.printStackTrace();

}

}

/*

結(jié)尾行

*/

//

`"--"

+

BOUNDARY

+

"--"

+

"\r\n"`

String

endLine

=

"--"

+

BOUNDARY

+

"--"

+

"\r\n";

try

{

bos.write(endLine.toString().getBytes("utf-8"));

}

catch

(IOException

e)

{

e.printStackTrace();

}

Log.v("upLoad",

"=====formImage====\n"

+

bos.toString());

return

bos.toByteArray();

}

//

Content-Type:

multipart/form-data;

boundary=8888888888888

@Override

public

String

getBodyContentType()

{

return

MULTIPART_FORM_DATA

+

";

boundary="

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論