Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android圖片異步上傳到PHP服務器實例

Android圖片異步上傳到PHP服務器實例

編輯:Android開發實例

       背景

       網上很多上傳到java服務器上的,找了好久,找到了上傳到php的了,思路跟我當初想的差不多,就是POST過去。廢話不多說,直接上圖看代碼。

Android圖片異步上傳到PHP服務器實例

Android圖片異步上傳到PHP服務器實例

Android圖片異步上傳到PHP服務器實例

       PHP代碼

PHP代碼
  1. <?php  
  2. $target_path  = "./upload/";//接收文件目錄  
  3. $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);  
  4. if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {  
  5.    echo "The file ".  basename( $_FILES['uploadedfile']['name']). " has been uploaded";  
  6. }  else{  
  7.    echo "There was an error uploading the file, please try again!" . $_FILES['uploadedfile']['error'];  
  8. }  
  9. ?>  

        Android代碼

        上傳的主要代碼:

Java代碼
  1. private void uploadFile(String uploadUrl)  
  2.   {  
  3.     String end = "\r\n";  
  4.     String twoHyphens = "--";  
  5.     String boundary = "******";  
  6.     try  
  7.     {  
  8.       URL url = new URL(uploadUrl);  
  9.       HttpURLConnection httpURLConnection = (HttpURLConnection) url  
  10.           .openConnection();//http連接  
  11.       // 設置每次傳輸的流大小,可以有效防止手機因為內存不足崩潰  
  12.       // 此方法用於在預先不知道內容長度時啟用沒有進行內部緩沖的 HTTP 請求正文的流。  
  13.       httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K  
  14.       // 允許輸入輸出流  
  15.       httpURLConnection.setDoInput(true);  
  16.       httpURLConnection.setDoOutput(true);  
  17.       httpURLConnection.setUseCaches(false);  
  18.       // 使用POST方法  
  19.       httpURLConnection.setRequestMethod("POST");  
  20.       httpURLConnection.setRequestProperty("Connection", "Keep-Alive");//保持一直連接  
  21.       httpURLConnection.setRequestProperty("Charset", "UTF-8");//編碼  
  22.       httpURLConnection.setRequestProperty("Content-Type",  
  23.           "multipart/form-data;boundary=" + boundary);//POST傳遞過去的編碼  
  24.   
  25.       DataOutputStream dos = new DataOutputStream(  
  26.           httpURLConnection.getOutputStream());//輸出流  
  27.       dos.writeBytes(twoHyphens + boundary + end);  
  28.       dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""  
  29.           + srcPath.substring(srcPath.lastIndexOf("/") + 1)  
  30.           + "\""  
  31.           + end);  
  32.       dos.writeBytes(end);  
  33.   
  34.       FileInputStream fis = new FileInputStream(srcPath);//文件輸入流,寫入到內存中  
  35.       byte[] buffer = new byte[8192]; // 8k  
  36.       int count = 0;  
  37.       // 讀取文件  
  38.       while ((count = fis.read(buffer)) != -1)  
  39.       {  
  40.         dos.write(buffer, 0, count);  
  41.       }  
  42.       fis.close();  
  43.   
  44.       dos.writeBytes(end);  
  45.       dos.writeBytes(twoHyphens + boundary + twoHyphens + end);  
  46.       dos.flush();  
  47.   
  48.       InputStream is = httpURLConnection.getInputStream();//http輸入,即得到返回的結果  
  49.       InputStreamReader isr = new InputStreamReader(is, "utf-8");  
  50.       BufferedReader br = new BufferedReader(isr);  
  51.       String result = br.readLine();  
  52.   
  53.       Toast.makeText(this, result, Toast.LENGTH_LONG).show();//將結果輸出  
  54.       dos.close();  
  55.       is.close();  
  56.   
  57.     } catch (Exception e)  
  58.     {  
  59.       e.printStackTrace();  
  60.       setTitle(e.getMessage());  
  61.     }  
  62.   }  

       因為安卓4.0之後耗時間的操作要求都在非UI線程中操作,即將前面的AsyncTask拿來用了吧~

       AsyncTask傳送門:http://www.cnblogs.com/yydcdut/p/3707960.html

       在這個類中,將上傳的操作放在doInBackground當中,可以有ProgressDialog顯示上傳了多少:

Java代碼
  1. // Read file  
  2. bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
  3.   
  4. while (bytesRead > 0) {  
  5.     outputStream.write(buffer, 0, bufferSize);  
  6.     length += bufferSize;  
  7.     progress = (int) ((length * 100) / totalSize);  
  8.     publishProgress(progress);  
  9.   
  10.     bytesAvailable = fileInputStream.available();  
  11.     bufferSize = Math.min(bytesAvailable, maxBufferSize);  
  12.     bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
  13. }  
  14. outputStream.writeBytes(lineEnd);  
  15. outputStream.writeBytes(twoHyphens + boundary + twoHyphens  
  16.         + lineEnd);  
  17. publishProgress(100);  

       還有就是,注意權限喲:

XML/HTML代碼
  1. <uses-permission android:name="android.permission.INTERNET" />  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved