2012-03-03 110 views
3

我現在試圖將圖像上傳到我的服務器。我可以拍攝照片並在Android設備上獲取我的位置。我有如下代碼將文件上傳到服務器:將圖像上傳到服務器PHP Android

public Boolean postFunction(File image) { 
    String tag = "postFunction"; 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(UPLOAD_URL); 

    try { 
     MultipartEntity entity = new MultipartEntity(); 

     entity.addPart("type", new StringBody("photo")); 
     entity.addPart("data", new FileBody(image)); 
     httppost.setEntity(entity); 
     HttpResponse response = httpclient.execute(httppost); 
     Log.i(tag, "picture was uploaded " + response.toString()); 
     return true; 

    } catch (ClientProtocolException e) { 
     Log.e(tag, "Client: " + e.toString()); 
     return false; 
    } catch (IOException e) { 
     Log.e(tag, "IO: " + e.toString()); 
     return false; 
    } 
} 

我的圖像文件通過這個功能,它的上傳。然而,錯誤在於我相信服務器端。

這是我的PHP代碼:

 public function upload() { 
     //$type = $this->input->post('type'); 
     //$data = $this->input->post('data'); 

     $base = $_REQUEST['data']; 

     echo $base; 

// base64 encoded utf-8 string 

     $binary = base64_decode($base); 

// binary, utf-8 bytes 

     header('Content-Type: bitmap; charset=utf-8'); 

// print($binary); 
//$theFile = base64_decode($image_data); 

     $file = fopen('./test.jpg', 'wb'); 

     fwrite($file, $binary); 

     fclose($file); 

     echo '<img src=test.jpg>'; 
    } 

的文件被感動,但仍保持空白。我在這裏錯過了什麼嗎?請幫忙,我嘗試了谷歌搜索,但想出了不同的結果,這並沒有多大幫助。

回答

3

你可以檢查一個非常好的教程here

也可以嘗試下面的代碼,

public class TryprojectActivity extends Activity { 
    InputStream is; 
    int pic_count = 0; 
    Bitmap bitmap=null; 
    FileInputStream in1,in2,in3; 
    BufferedInputStream buf; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

     try { 
      in1 = new FileInputStream("/sdcard/1.jpg"); 
     } 
     catch (FileNotFoundException e2) { 
     // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

     try { 
      in2 = new FileInputStream("/sdcard/2.jpg"); 
     } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     in3 = new FileInputStream("/sdcard/3.jpg"); 
    } 
    catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Bitmap bitmapOrg1 = BitmapFactory.decodeStream(in1); 
    ByteArrayOutputStream bao1 = new ByteArrayOutputStream(); 
    bitmapOrg1.compress(Bitmap.CompressFormat.JPEG, 90, bao1); 
    byte [] imagearray1 = bao1.toByteArray(); 
    String ba1=Base64.encode(imagearray1); 

    Bitmap bitmapOrg2 = BitmapFactory.decodeStream(in2); 
    ByteArrayOutputStream bao2 = new ByteArrayOutputStream(); 
    bitmapOrg2.compress(Bitmap.CompressFormat.JPEG, 90, bao2); 
    byte [] imagearray2 = bao2.toByteArray(); 
    String ba2=Base64.encode(imagearray2); 

    Bitmap bitmapOrg3 = BitmapFactory.decodeStream(in3); 
    ByteArrayOutputStream bao3 = new ByteArrayOutputStream(); 
    bitmapOrg3.compress(Bitmap.CompressFormat.JPEG, 90, bao3); 
    byte [] imagearray3 = bao3.toByteArray(); 
    String ba3=Base64.encode(imagearray3); 

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 

    nameValuePairs.add(new BasicNameValuePair("image1",ba1)); 
    nameValuePairs.add(new BasicNameValuePair("image2",ba2)); 
    nameValuePairs.add(new BasicNameValuePair("image3",ba3)); 

    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://helpdesk.cispl.com/upload_file.php"); 
     UrlEncodedFormEntity obj = new UrlEncodedFormEntity(nameValuePairs); 
     obj.setChunked(true); 
     httppost.setEntity(obj); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     //is = entity.getContent(); 
     httpclient.getConnectionManager().shutdown(); 
    } 
    catch(Exception e){ 
     //CommonFunctions.writeLOG(ctx.getClass().toString(), e.toString()); 
     //CommonFunctions.showToast(ctx, "Unable to post captured image file: " + 
     //e.toString()); 
    } 
} 
0

如果您在基於UNIX的平臺上運行的Apache/PHP的,請確保您的Apache服務器有寫的權限,它試圖以存儲文件的目錄(根據您當前的代碼,PHP腳本所在的同一目錄)。作爲快速測試,請在腳本所在的目錄中執行chmod 0777 .,然後查看上傳的圖像是否顯示正確。