2012-07-27 70 views
1

我试图从我的android设备上传一个文件到一个php服务器,但是我得到了“注意:未定义的索引:upload_file.php中的文件在第3行。任何提示可能是什么?android multipart post to php

这是upload_file.php

<?php 
if(isset($_POST)) 
{ 
    $allowedExts = array("jpg", "jpeg", "gif", "png"); 
    $extension = end(explode(".", $_FILES["file"]["name"])); 
    echo $_FILES["file"]["type"] . ($_FILES["file"]["size"] < 2000000); 
    if (((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/pjpeg")) 
    && ($_FILES["file"]["size"] < 2000000)) 
    && in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
     echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
     if (file_exists("files/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
     else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"],"files/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "files/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
    else 
    { 
    echo "Invalid file"; 
    } 
} 
else 
{ 
    echo "nothing posted"; 
} 
?> 

,这是大干快上我的AndroidDevice执行

/** 
* POSTphoto 
**/ 
private class POSTphoto 
     extends AsyncTask<String,String,String> 
{ 
    @Override 
    /** doInBackground */ 
    protected String doInBackground(String... filename) 
    { 
     File file = new File(filename[0]); 
     HttpPost request; 
     MultipartEntity mpe = new MultipartEntity(
       HttpMultipartMode.BROWSER_COMPATIBLE); 
     FileBody cbFile; 
     try 
     { 
      cbFile = new FileBody(file , "image/jpeg"); 
      mpe.addPart("file" , cbFile); 

      // Creating the request. 
      String resource = APIcontroller.buildUrl(""); 
      request = new HttpPost(resource); 
      request.addHeader("Content-Type" , "multipart/form-data"); 
      request.setEntity(mpe); 
      return APIcontroller.execute(request); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return "some error"; 
     } 
    }// doInBackground 

    @Override 
    /** Shows the content of the result. 
    * @param result is what the server returns in doInBackground. 
    **/ 
    protected void onPostExecute(String result) 
    { 
     // CLose clients connection pool. 
     APIcontroller.closeClient(); 
     if (!result.equals("")) 
     { // Result not empty. 
      Log.d("result" , result); 
      Toast.makeText(FilebrowserActivity.this , result , 
        Toast.LENGTH_LONG).show(); 
     } 
     else 
     { // Result empty. 
      Toast.makeText(FilebrowserActivity.this , "FAILED" , 
        Toast.LENGTH_LONG).show(); 
     } 
    } // onPostExecute 
} // POSTphoto 

回答

-1

我不是一个Android专家,但我猜

File file = new File(filename[0]); 

应该

File file = new File('file'); 

,因为你在你的PHP脚本访问像$ _FILES [ “文件”]文件变量。请试一试。

+2

不,这是无效的! – 2012-07-27 11:12:58

+0

我正在用这种方式创建文件..字符串被传递给AsyncTask – j4hr0m 2012-07-27 11:21:44