从Android上传多个图像在php服务器上

问题描述:

帮助这个特定的服务器端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

看起来你的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(并从图像创建文件)。 –

首先可以优化到以下几点:

$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!'; 
    } 
} 

检查发送多个图片服务器 Click here