2012-01-20 101 views
3

幫助這個特定的服務器端php代碼我沒有任何關於php的知識,我必須從android上傳三個圖像到這個php頁面。從Android上傳多個圖像在php服務器上

我已經嘗試了很多方法,並尋找它,但沒有教程或任何東西沒有幫助我我的android代碼工作正常。 DNS也已配置,但圖像未顯示在服務器端。請幫我用java代碼。

PHP:

<?php 
if ($_FILES["file1"]["error"] > 0) 
{ 
    header("HTTP/1.1 400 Bad Request"); 
    echo "Error: " . $_FILES["file1"]["error"] . "<br />"; 
} 
else if ($_FILES["file2"]["error"] > 0) 
{ 
    header("HTTP/1.1 400 Bad Request"); 
    echo "Error: " . $_FILES["file1"]["error"] . "<br />"; 
} 
else if ($_FILES["file3"]["error"] > 0) 
{ 
    header("HTTP/1.1 400 Bad Request"); 
    echo "Error: " . $_FILES["file1"]["error"] . "<br />"; 
} 
else 
{ 
    if ($_FILES["file1"]["error"] > 0) 
    { 
     echo "Error: " . $_FILES["file1"]["error"] . "<br />"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["file1"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["file1"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["file1"]["size"]/1024) . " Kb<br />"; 
     echo "Stored in: " . $_FILES["file1"]["tmp_name"]. "<br />"; 
    } 

    //$target_path = "uploads/"; 
    $target_path = "elp/pendingimages/"; 

    $target_path = $target_path . basename($_FILES['file1']['name']); 

    if(move_uploaded_file($_FILES['file1']['tmp_name'], $target_path)) { 
     echo "The file ". basename($_FILES['file1']['name']). 
      " has been uploaded"; 
    } 
    else{ 
     echo "There was an error uploading the file, please try again!"; 
    } 

    if ($_FILES["file2"]["error"] > 0) 
    { 
     echo "Error: " . $_FILES["file2"]["error"] . "<br />"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["file2"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["file2"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["file2"]["size"]/1024) . " Kb<br />"; 
     echo "Stored in: " . $_FILES["file2"]["tmp_name"]. "<br />"; 
    } 

    //$target_path = "uploads/"; 
    $target_path = "elp/pendingimages/"; 

    $target_path = $target_path . basename($_FILES['file2']['name']); 

    if(move_uploaded_file($_FILES['file2']['tmp_name'], $target_path)) { 
     echo "The file ". basename($_FILES['file2']['name']). 
     " has been uploaded"; 
    } 
    else{ 
     echo "There was an error uploading the file, please try again!"; 
    } 

    if ($_FILES["file3"]["error"] > 0) 
    { 
     echo "Error: " . $_FILES["file3"]["error"] . "<br />"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["file3"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["file3"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["file3"]["size"]/1024) . " Kb<br />"; 
     echo "Stored in: " . $_FILES["file3"]["tmp_name"]. "<br />"; 
    } 


    //$target_path = "uploads/"; 
    $target_path = "elp/pendingimages/"; 

    $target_path = $target_path . basename($_FILES['file3']['name']); 

    if(move_uploaded_file($_FILES['file3']['tmp_name'], $target_path)) { 
     echo "The file ". basename($_FILES['file3']['name']). 
      " has been uploaded"; 
    } 
    else{ 
     echo "There was an error uploading the file, please try again!"; 
    } 
} 

?> 

的Java:

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

這些圖像後我必須通過HTTP上傳,怎麼你做你的上傳? (因爲你提到Java) – greut

+0

我的意思是Android應用程序中所需的Java Activity代碼。我已經厭倦了使用http和mulitpart上傳,但沒有用。這可能會發生,因爲我可能不知道關於PHP的代碼。 – user1160020

+0

向我們顯示代碼。 – greut

回答

2

看起來你的PHP是正確的。

在您的設備上使用帶有MultipartEntity數據類型的HTTP POST請求。更多here

編輯

實例從我的鏈接:

您必須下載額外的庫來獲得MultipartEntity運行!

1)從http://james.apache.org/download.cgi#Apache_Mime4J下載httpcomponents-client-4.1.zip並將apache-mime4j-0.6.1.jar添加到您的項目中。

2)從http://hc.apache.org/downloads.cgi下載httpcomponents-client-4.1-bin.zip並將httpclient-4.1.jar,httpcore-4.1.jar和httpmime-4.1.jar添加到您的項目中。

3)使用下面的示例代碼。的所有代碼

 


    private DefaultHttpClient mHttpClient; 


    public ServerCommunication() { 
     HttpParams params = new BasicHttpParams(); 
     params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
     mHttpClient = new DefaultHttpClient(params); 
    } 


    public void uploadUserPhoto(File image1, File image2, File image3) { 

     try { 

      HttpPost httppost = new HttpPost("some url"); 

      MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      multipartEntity.addPart("Title", new StringBody("Title")); 
      multipartEntity.addPart("Nick", new StringBody("Nick")); 
      multipartEntity.addPart("Email", new StringBody("Email")); 
      multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT)); 
      multipartEntity.addPart("file1", new FileBody(image1)); 
      multipartEntity.addPart("file2", new FileBody(image2)); 
      multipartEntity.addPart("file3", new FileBody(image3)); 
      httppost.setEntity(multipartEntity); 

      mHttpClient.execute(httppost, new PhotoUploadResponseHandler()); 

     } catch (Exception e) { 
      Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e); 
     } 
    } 

    private class PhotoUploadResponseHandler implements ResponseHandler { 

     @Override 
     public Object handleResponse(HttpResponse response) 
       throws ClientProtocolException, IOException { 

      HttpEntity r_entity = response.getEntity(); 
      String responseString = EntityUtils.toString(r_entity); 
      Log.d("UPLOAD", responseString); 

      return null; 
     } 

    } 


 
+0

我將所有三個圖像轉換爲byteArray,然後將其添加到列表中。那之後我該怎麼做?或者我走錯了路? – user1160020

+0

in1 = new FileInputStream(「/ sdcard/1.jpg」); 位圖bitmapOrg1 = BitmapFactory.decodeStream(in1); ByteArrayOutputStream bao1 = new ByteArrayOutputStream(); bitmapOrg1.compress(Bitmap.CompressFormat.JPEG,90,bao1); \t byte [] imagearray1 = bao1.toByteArray(); String ba1 = Base64.encode(imagearray1); 這是我爲所有三個圖像做的 – user1160020

+0

看我的例子。通過這種方法,MultipartEntity將爲您做所有事情。您只需從文件創建FileBody(並從圖像創建文件)。 –

0

首先可以優化到以下幾點:

$files = array('file1', 'file2', 'file3'); 
$path = 'elp/pendingimages/'; 

foreach ($files as $file) { 
    if ($_FILES[$file]['error'] > 0) { 
     echo 'Error: '. $_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 'Stored in: '. $_FILES[$file]['tmp_name'] .'<br />'; 
    } 

    $basename = basename($_FILES[$file]['name']); 

    if (move_uploaded_file($_FILES[$file]['tmp_name'], $path . $basename) { 
     echo "The file {$basename} has been uploaded"; 
    } 
    else { 
     echo 'There was an error uploading the file, please try again!'; 
    } 
} 

如果您正在使用不同的領域爲每個文件,然後它的罰款。

接下來,你可以看到什麼$ _FILES數組店本身時,它的多個上傳:

$_FILES = array(
    ['files'] => array(
     ['name'] => array(
      [0] => 'WALL_video.jpg' 
      [1] => 'WALLc.jpg' 
     ) 
     ['type'] => array(
      [0] => 'image/jpeg' 
      [1] => 'image/jpeg' 
     ) 
     ['tmp_name'] => array(
      [0] => '/tmp/phpnbKcdM' 
      [1] => '/tmp/phpnrHSN1' 
     ) 
     ['error'] => array(
      [0] => 0 
      [1] => 0 
     ) 
     ['size'] => array(
      [0] => 885968 
      [1] => 839713 
     ) 
    ) 
) 

下面的代碼會爲你工作,如果你正在使用一個字段名稱,如files[]作爲文件的陣列。

$target_path = 'elp/pendingimages/'; 

foreach ($_FILES['files']['name'] as $index => $name) { 
    if ($_FILES['files']['error'][$index] > 0) { 
     echo 'Error: ' . $_FILES['files']['error'][$index] . '<br />'; 
    } 
    else { 
     echo 'Upload: '. $_FILES['files']['name'][$index] .'<br />'; 
     echo 'Type: '. $_FILES['files']['type'][$index] .'<br />'; 
     echo 'Size: '. ($_FILES['files']['size'][$index]/1024) .' Kb<br />'; 
     echo 'Stored in: '. $_FILES['files']['tmp_name'][$index] .'<br />'; 
    } 

    $path = $target_path . basename($name); 

    if (move_uploaded_file($_FILES['files']['tmp_name'][$index], $path) { 
     echo "The file {$name} has been uploaded"; 
    } 
    else { 
     echo 'There was an error uploading the file, please try again!'; 
    } 
} 
相關問題