2012年6月4日 星期一

使用Android將檔案傳到Server use PHP

首先先說明Android

在這邊是使用HttpClient來實現上傳,程式如下
public void UploadFiles(String PathFile) {
    new Thread() {  
        @Override  
        public void run() {  
            super.run();  
            
            List< NameValuePair> params = new ArrayList< NameValuePair>();
            params.add(new BasicNameValuePair("file",PathFile));
            
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost("Server Address/update.php");
            
            try{
                //setup multipart entity
                MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

                for(int i=0;i< params.size();i++){
                    //identify param type by Key
                    if(params.get(i).getName().equals("file")){
                        File f = new File(params.get(i).getValue());
                        FileBody fileBody = new FileBody(f);
                        entity.addPart("image"+i,fileBody);
                    }else{
                        entity.addPart(params.get(i).getName(),new StringBody(params.get(i).getValue()));
                    }
                }
                post.setEntity(entity);

                //create response handler
                ResponseHandler< String> handler = new BasicResponseHandler();
                //execute and get response
                UploadFilesResponse = new String(client.execute(post,handler).getBytes(),HTTP.UTF_8);
                if(D) Log.e(TAG, "--- response ---"+ UploadFilesResponse);
            }catch(Exception e){
                e.printStackTrace();
            }
        }  
    }.start();  
}

粉紅字是你要上傳檔案的路徑
紅色字是你的Server路徑


接著在Server寫一隻PHP檔案

update.php
<?php 
    if(move_uploaded_file($_FILES['image0']['tmp_name'], "./ImageFiles/".$_FILES['image0']['name'])){
        echo "uploaded";
    }else{
        echo "unsuccessfully";
    }
?>

因為在Android在上傳資料寫法,是使用多檔案上傳的方式,也就是For迴圈那邊,

所以在PHP也應該是這樣寫,但我PHP並沒直接跑迴圈,就直接抓第一筆  $_FILES['image0']


如果在PHP有必要接收兩個檔案以上,直接在裡面加入迴圈,就可以了



最後記得在Server的路徑建立資料夾,不然傳不上去








沒有留言:

張貼留言