android上傳圖片到PHP後台全過程

來源:互聯網
上載者:User
PS:便宜的伺服器可是會不定時的坑你一把。

今天在修改app的一些互動以及重構代碼。一切都是那麼順利,啪啪啪,runing,測試沒問題,再啪啪啪。。。

突然,測試上傳頭像的時候,老是連線逾時。。。。報如下錯誤:

XXXXXXSokcetTimeOutXXXXXXXX

然後自己設定HTTP的逾時時間:

  //設定逾時時間  httpclient.setTimeout(20000);

再building,runing,還是不行。。。。這就怪了,明明好好的,怎麼會突然就變成連線逾時了呢!又折騰了一陣子後,也跟後台那邊的朋友溝通過,他也測試了上傳介面,發現沒什麼問題,就讓我自己去折騰去了。。。。

我就鬱悶了,看不出原先的代碼有什麼錯誤,也沒什麼法子了,就出最下下策吧,自己搭一個PHP上傳圖片介面,親自測試下到底是怎麼回事。。。。


1.首先,你得下一個方便快捷的PHP伺服器,我這裡用了WampServer,百度----下載-----安裝-----啟動,瀏覽器輸入:http://127.0.0.1 有頁面顯示,OK了。就這麼簡單!

2.瀏覽器輸入 : http://本機IP地址 斷行符號, 發現報錯,類似“You don't have permission to access / on this server” 說明你的WM還沒設定,需要進行如下設定:

造成這個問題的原因是Apache 的http.conf內的預設配置是
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
只允許127.0.0.1訪問,點擊wampserver表徵圖讓後點擊Putonline,http.conf內的以上預設配置自動修改為
# onlineoffline tag - don't remove
Order Allow,Deny
Allow from all
現在localhost可以訪問了。

同樣phpMyadmin在localhost下不能正常訪問在127.0.0.1能正常訪問,解決方案:
點擊根目錄下的alias目錄,開啟phpmyadmin.conf設定檔,和上面修改http.conf一樣把
Deny from all
Allow from 127.0.0.1
修改為
Allow from all


3. 再此輸入 : http://本機IP地址 斷行符號 顯示頁面 OK! 至於為什麼要第二步、第三步呢,我就不說了。。。留給新人去想想吧! 大神直接無視。。。。。

4.寫一個上傳圖片的PHP檔案,當然我一個敲java的孩子一下子怎麼可能憋的出來,那怎麼辦,當然是百度參考別人的了,下面的PHP代碼源自網路,親測沒有錯誤:

 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.經過上面幾個步驟,PHP端已經搭建好了,現在就是回到android端改改IP地址測試下就oK了,程式碼片段如下:

       //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);params.put("attach", uploadImg);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//上傳地址//String url=URLConfigs.UploadHeadImage_ukey+myprefs.Ukey().get();String url="http://192.168.0.8/upload.php";//LogUtil.e(TAG, "upload img url :"+url);AsyncHttpUtil.post_loading(context,url, params, new MyTextHttpResponseHandler() {@Overridepublic 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()){//上傳成功,設定圖片face.setImageBitmap(bmp);ToastUtils.show(context, "上傳成功");}else{ToastUtils.show(context, json);}myprefs.position().put(0);}@Overridepublic 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參數是和服務端一一對應的,別亂改。。。。

String url="http://192.168.0.8/upload.php"; 這個192.168.0.8是我的PHP部署的地址,改成你自己的就行了。


PS:別犯2,用了127.0.0.1 想想為啥不能用127.0.0.1

到此就是building,runing了。 發現OK。。。。 可以上傳,並在www目錄下找到upload目錄,upload目錄下有上傳的圖片。。。。




7.這就納悶了。。。。 我又鼓起勇氣找了PHP後端,跟他激烈的討論一番後,發現是伺服器坑了爹啊! 800塊一年的伺服器。。。。。唉。。。不說了。。。。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.