通過iOS原生代碼上傳多個(gè)參數(shù)和一張圖片(swift)

上傳圖片在網(wǎng)頁中最常用的就是POST請求了,將圖片編碼到POST請求體(body)中,通過請求數(shù)據(jù)一起發(fā)送到服務(wù)器上,下面的代碼就是POST請求上傳圖片。

在iOS開發(fā)中,圖片上傳的請求體非常難寫,格式要求非常嚴(yán)格,出一點(diǎn)錯(cuò)誤都會(huì)造成上傳失敗,或請求數(shù)據(jù)失敗,先看格式:

--Boundary+72D4CD655314C423

Content-Disposition: form-data;

name="uploadFile"; filename="001.png"

Content-Type:image/png

Content-Transfer-Encoding: binary

... contents of boris.png ...

--Boundary+72D4CD655314C423--

這是一個(gè)不帶其他任務(wù)參數(shù),body中只有一張圖就要寫成這樣

分別說明一下:

--Boundary+72D4CD655314C423? ?//分割符,以“--”開頭,后面的字隨便寫,只要不寫中文即可

Content-Disposition: form-data;

name="uploadFile"; filename="001.png"??//這里注明服務(wù)器接收圖片的參數(shù)(類似于接收用戶名的userName)及服務(wù)器上保存圖片的文件名

Content-Type:image/png??//圖片類型為png

Content-Transfer-Encoding: binary??//編碼方式

//這里是空一行,必不可少!!

... contents of boris.png ...??//圖片數(shù)據(jù)部分

--Boundary+72D4CD655314C423--??//分隔符后面以"--"結(jié)尾,表明結(jié)束

3、如果有其他表單數(shù)據(jù),如傳用戶ID等參數(shù),也要寫成以上格式:

--Boundary+72D4CD655314C423

Content-Disposition: form-data; name="userId"

254

--Boundary+72D4CD655314C423

Content-Disposition: form-data; name="shopId"

18718

具體參數(shù)含義與圖片一致,一般這段會(huì)在圖片上面,因此沒有結(jié)尾符,如果沒有其他數(shù)據(jù)了,那要加上結(jié)尾符。

下面是具體的代碼:

let request=NSMutableURLRequest(URL:NSURL(string:url)!)

request.HTTPMethod="POST"http://設(shè)置請求方式

//分割標(biāo)識(shí)

let boundary:String="BOUNDARY"

//上傳文件必須設(shè)置

let contentType:String="multipart/form-data;boundary="+boundary

request.addValue(contentType, forHTTPHeaderField:"Content-Type")


let body=NSMutableData()

//parameter是一個(gè)帶有key, value的字典,這是所帶的參數(shù)

for(key, value) in parameter {

print("zheli ",key,value)

letvalueStr = valueas!String

body.appendData(NSString(format:"--"+boundary+"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(NSString(format:"Content-Disposition:form-data;name=\"\(key)\"\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(NSString(format:valueStr).dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(NSString(format:"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

}


//一個(gè)圖片

body.appendData(NSString(format:"--"+boundary+"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

//這一塊是文件的名稱

body.appendData(NSString(format:"Content-Disposition:form-data;name=\"file\";filename=\"dd.jpg\"rn").dataUsingEncoding(NSUTF8StringEncoding)!)

//這里是圖片的格式

body.appendData(NSString(format:"Content-Type:image/png\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(NSString(format:"Content-Transfer-Encoding: binary\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

body.appendData(requestBody)

body.appendData(NSString(format:"\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

letbottomStr ="--"+boundary+"--"

body.appendData(NSString(format:bottomStr).dataUsingEncoding(NSUTF8StringEncoding)!)


request.HTTPBody=body

CEProgressHUD.show()

let que=NSOperationQueue()

NSURLConnection.sendAsynchronousRequest(request, queue: que, completionHandler: {

(response, data, error) ->Voidin

if(error !=nil){

print(error)

}else{

//上傳返回的狀態(tài)

})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于iOS無法通過html表單來上傳圖片,因此想要上傳圖片,必須實(shí)現(xiàn)http請求,而不能像其他語言那樣通過html...
    山楊閱讀 2,381評(píng)論 1 6
  • +(NSString *)PostImagesToServer:(NSString *) strUrl dicPo...
    Daimer閱讀 580評(píng)論 0 2
  • 這里不做多的介紹,直接上代碼,有問題加QQ了解409961891 - (void)pause{ [self.upl...
    心在前方閱讀 1,737評(píng)論 0 0
  • 時(shí)光不比人,它經(jīng)不起一次次的辜負(fù) 墮落街的酒吧,音響里放著動(dòng)感十足的舞曲,震耳欲聾,一群情緒高昂的學(xué)生正在隨...
    蘇州紀(jì)閱讀 446評(píng)論 0 1
  • 近段時(shí)間 又重復(fù)了一遍《從你的全世界路過》知道我為什么喜歡這本書嗎 因?yàn)檫@些,我從來就沒經(jīng)歷過 我沒有那樣喜歡過一...
    南方的瘋言閱讀 294評(píng)論 0 0

友情鏈接更多精彩內(nèi)容