




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工簽員工合同范本
- 倆兄弟合伙開(kāi)店合同范本
- 與他人合伙經(jīng)營(yíng)合同范本
- 共享汽車租車合同范本
- 冷鏈購(gòu)銷合同范本
- 合伙出資金合同范本
- 員工協(xié)議簡(jiǎn)易合同范本
- 合同范本水印有問(wèn)題
- 共同建房合同范本
- 廠房質(zhì)押合同范本
- 2024年上饒職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案1套
- 生物醫(yī)藥行業(yè)市場(chǎng)前景及投資研究報(bào)告:代謝相關(guān)脂肪肝炎(MASHNASH)無(wú)藥可治巨大市場(chǎng)需求
- 莫塔全科醫(yī)學(xué)安全診斷策略
- 保密法實(shí)施條例解讀培訓(xùn)
- (正式版)SHT 3225-2024 石油化工安全儀表系統(tǒng)安全完整性等級(jí)設(shè)計(jì)規(guī)范
- 第一單元《歡天喜地》第一課 《多彩的節(jié)日》(教案)三年級(jí)下冊(cè)《人文與社會(huì)》黑龍江地方課程
- (高清版)DZT 0291-2015 飾面石材礦產(chǎn)地質(zhì)勘查規(guī)范
- 2024全國(guó)職業(yè)院校技能大賽ZZ059安全保衛(wèi)賽項(xiàng)規(guī)程+賽題
- 超高分子量聚乙烯纖維發(fā)展前景分析
- 腦梗死伴發(fā)高血壓的護(hù)理
- 派出所開(kāi)展小學(xué)安全教育講座
評(píng)論
0/150
提交評(píng)論