android上傳圖片到PHP的過(guò)程詳解
今天在做上傳頭像的時(shí)候,總是提交連接超時(shí)錯(cuò)誤,報(bào)錯(cuò)信息如下:XXXXXXSokcetTimeOutXXXXXXXX
然后自己設(shè)置HTTP的超時(shí)時(shí)間:
[java] view plaincopyprint?
//設(shè)置超時(shí)時(shí)間
httpclient.setTimeout(20000);
再building,runing,還是不行。。。。這就怪了,明明好好的,怎么會(huì)突然就變成連接超時(shí)了呢!又折騰了一陣子后,也跟后臺(tái)那邊的朋友溝通過(guò),他也測(cè)試了上傳接口,發(fā)現(xiàn)沒(méi)什么問(wèn)題,就讓我自己去折騰去了。。。。
我就郁悶了,看不出原先的代碼有什么錯(cuò)誤,也沒(méi)什么法子了,就出最下下策吧,自己搭一個(gè)PHP上傳圖片接口,親自測(cè)試下到底是怎么回事。。。。
1.首先,你得下一個(gè)方便快捷的PHP服務(wù)器,我這里用了WampServer,百度----下載-----安裝-----啟動(dòng),瀏覽器輸入:http://127.0.0.1 有頁(yè)面顯示,OK了。就這么簡(jiǎn)單!
2.瀏覽器輸入 : http://本機(jī)IP地址 回車(chē), 發(fā)現(xiàn)報(bào)錯(cuò),類(lèi)似“You don't have permission to access / on this server” 說(shuō)明你的WM還沒(méi)設(shè)置,需要進(jìn)行如下設(shè)置:
造成這個(gè)問(wèn)題的原因是Apache 的http.conf內(nèi)的默認(rèn)配置是
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
只允許127.0.0.1訪問(wèn),點(diǎn)擊wampserver圖標(biāo)讓后點(diǎn)擊Putonline,http.conf內(nèi)的以上默認(rèn)配置自動(dòng)修改為
# onlineoffline tag - don't remove
Order Allow,Deny
Allow from all
現(xiàn)在localhost可以訪問(wèn)了。
同樣phpMyadmin在localhost下不能正常訪問(wèn)在127.0.0.1能正常訪問(wèn),解決方法:
點(diǎn)擊根目錄下的alias目錄,打開(kāi)phpmyadmin.conf配置文件,和上面修改http.conf一樣把
Deny from all
Allow from 127.0.0.1
修改為
Allow from all
3. 再此輸入 : http://本機(jī)IP地址 回車(chē) 顯示頁(yè)面 OK! 至于為什么要第二步、第三步呢,我就不說(shuō)了。。。留給新人去想想吧! 大神直接無(wú)視。。。。。
4.寫(xiě)一個(gè)上傳圖片的PHP文件,當(dāng)然我一個(gè)敲java的孩子一下子怎么可能憋的出來(lái),那怎么辦,當(dāng)然是百度參考別人的了,下面的PHP代碼源自網(wǎng)絡(luò),親測(cè)沒(méi)有錯(cuò)誤:
[php] view plaincopyprint? <?php $base_path = "./upload/"; //存放目錄 if(!is_dir($base_path)){ mkdir($base_path,0777,true); } $target_path = $base_path . basename ( $_FILES ['attach'] ['name'] ); if (move_uploaded_file ( $_FILES ['attach'] ['tmp_name'], $target_path )) { $array = array ( "status" => true, "msg" => $_FILES ['attach'] ['name'] ); echo json_encode ( $array ); } else { $array = array ( "status" => false, "msg" => "There was an error uploading the file, please try again!" . $_FILES ['attach'] ['error'] ); echo json_encode ( $array ); } ?>
5.將上面的php文件放在WM安裝目錄下的www目錄下,我的如下圖所示,僅供參考:
6.經(jīng)過(guò)上面幾個(gè)步驟,PHP端已經(jīng)搭建好了,現(xiàn)在就是回到android端改改IP地址測(cè)試下就oK了,代碼段如下:
[java] view plaincopyprint? //HTTP上傳圖片 RequestParams params = new RequestParams(); try { //將壓縮后的bitmap保存為圖片文件 String saveImgPath=getSD_Path()+"/saveimg.png"; File saveimg=new File(saveImgPath); FileOutputStream fos = new FileOutputStream(saveimg); bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); //上傳壓縮后的文件,大約100k左右 File uploadImg=new File(saveImgPath); <span style="color:#ff0000;">params.put("attach", uploadImg);</span> } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //上傳地址 String url=URLConfigs.UploadHeadImage_ukey+myprefs.Ukey().get(); <span style="color:#ff0000;">String url="http://192.168.0.8/upload.php";</span> LogUtil.e(TAG, "upload img url :"+url); AsyncHttpUtil.post_loading(context,url, params, new MyTextHttpResponseHandler() { @Override public void onSuccess(int status, Header[] arg1, String json) { super.onSuccess(status, arg1, json); LogUtil.e(TAG, "上傳圖片 json :"+json); RespondBaseEntity entity=GsonUtil.GetFromJson(json, RespondBaseEntity.class); if(entity.isStatus()){ //上傳成功,設(shè)置圖片 face.setImageBitmap(bmp); ToastUtils.show(context, "上傳成功"); }else{ ToastUtils.show(context, json); } myprefs.position().put(0); } @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { super.onFailure(arg0, arg1, arg2, arg3); myprefs.position().put(0); arg3.printStackTrace(); ToastUtils.show(context, R.string.network_unavailable); }
params.put("attach", uploadImg); 這里的attach參數(shù)是和服務(wù)端一一對(duì)應(yīng)的,別亂改。。。。 到此就是building,runing了。 發(fā)現(xiàn)OK。。。。 可以上傳,并在www目錄下找到upload目錄,upload目錄下有上傳的圖片。。。。
String url="
PS:別犯2,用了127.0.0.1 想想為啥不能用127.0.0.1
7.這就納悶了。。。。 我又鼓起勇氣找了PHP后端,跟他激烈的討論一番后,發(fā)現(xiàn)是服務(wù)器坑了爹?。?nbsp; 800塊一年的服務(wù)器。。。。。唉。。。不說(shuō)了。。。。
相關(guān)文章
定位地理位置PHP判斷員工打卡簽到經(jīng)緯度是否在打卡之內(nèi)
這篇文章主要介紹了定位地理位置PHP判斷員工打卡簽到經(jīng)緯度是否在打卡之內(nèi),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05在 Laravel 項(xiàng)目中使用 webpack-encore的方法
這篇文章主要介紹了在 Laravel 項(xiàng)目中使用 webpack-encore的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07從零開(kāi)始學(xué)YII2框架(一)通過(guò)Composer安裝Yii2框架
今天終于搞明白怎么安裝Yii2了。對(duì)于我這種小白來(lái)說(shuō)真是費(fèi)盡周折。下面來(lái)介紹下如何安裝Composer和如何使用Composer安裝Yii2。2014-08-08PHP調(diào)用API接口實(shí)現(xiàn)天氣查詢(xún)功能的示例
下面小編就為大家?guī)?lái)一篇PHP調(diào)用API接口實(shí)現(xiàn)天氣查詢(xún)功能的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09基于php偽靜態(tài)的實(shí)現(xiàn)詳細(xì)介紹
本篇文章介紹了,基于php偽靜態(tài)的實(shí)現(xiàn)詳細(xì)分析。需要的朋友參考下2013-04-04