【问题标题】:Uploading file from android (java) to server using PHP使用PHP将文件从android(java)上传到服务器
【发布时间】:2014-01-26 12:31:50
【问题描述】:

您好,我正在尝试使用 PHP 将文件从我的 android 应用程序上传到我的服务器。

我已经阅读了这篇文章:

How to upload a file using Java HttpClient library working with PHP http://www.veereshr.com/Java/Upload How do I send a file in Android from a mobile device to server using http?

这是我的 JAVA 代码:

public void upload() throws Exception {

        File file = new File("data/data/com.tigo/databases/exercise");

        Log.i("file.getName()", file.getName());

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://***.***.***.***/backDatabase.php");

        InputStreamEntity reqEntity = new InputStreamEntity( new FileInputStream(file), -1);
        reqEntity.setContentType("binary/octet-stream");    

        reqEntity.setChunked(true);
        httppost.setEntity(reqEntity);
        HttpResponse response = httpclient.execute(httppost);

        if((response.getStatusLine().toString()).equals("HTTP/1.1 200 OK")){
            // Successfully Uploaded
            Log.i("uploaded", response.getStatusLine().toString());
        }
        else{
            // Did not upload. Add your logic here. Maybe you want to retry.
            Log.i(" not uploaded", response.getStatusLine().toString());
        }

        httpclient.getConnectionManager().shutdown();
    }

这是我的 PHP 代码:

<?php


    $uploads_dir = '/tigo/databaseBackup';

    if (is_uploaded_file($_FILES['exercise']['tmp_name']))
    {

    $info =  "File ". $_FILES['exercise']['name'] ." uploaded successfully.\n";
    $file = 'emailTest.log';
    file_put_contents($file, $info, FILE_APPEND | LOCK_EX);

    move_uploaded_file ($_FILES['exercise'] ['tmp_name'], $_FILES['exercise'] ['name']);

    } 
    else 
    {

    $info =  "Possible file upload attack: ";
    $file = 'emailTest.log';
    file_put_contents($file, $info, FILE_APPEND | LOCK_EX);

    $info =  "filename '". $_FILES['exercise']['tmp_name'] . "'.";
    file_put_contents($file, $info, FILE_APPEND | LOCK_EX);

    print_r($_FILES);

    }

?>

在我的 logcat 中,我得到 HTTP/1.1 200 OK。 当我查看服务器日志时,我收到此错误:

PHP Notice:  Undefined index: exercise in /var/www/backDatabase.php on line 23

我也试过用:

$_FILES['userfile']['name']

代替

$_FILES['exercise']['tmp_name']

我的服务器日志中出现了同样的错误。

我认为我的问题是我无法引用我上传的文件。

感谢您的帮助。

【问题讨论】:

    标签: java php android


    【解决方案1】:

    尝试多部分实体

    public void upload(String filepath) throws IOException
        {
         HttpClient httpclient = new DefaultHttpClient();
         httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
         HttpPost httppost = new HttpPost("url");
         File file = new File(filepath);
         MultipartEntity mpEntity = new MultipartEntity();
         ContentBody cbFile = new FileBody(file, "image/jpeg");
         mpEntity.addPart("userfile", cbFile); 
         httppost.setEntity(mpEntity);
         System.out.println("executing request " + httppost.getRequestLine());
         HttpResponse response = httpclient.execute(httppost);
         HttpEntity resEntity = response.getEntity();
                 // check the response and do what is required
          }
    

    【讨论】:

    • 您不需要创建FileInputStream 吗?
    【解决方案2】:

    试试这个:

    JAVA代码:

    import java.io.File;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpVersion;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.ContentBody;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreProtocolPNames;
    import org.apache.http.util.EntityUtils;
    
    public class UploadFile {
    public static void main(String[] args) throws Exception {
    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    
    HttpPost httppost = new HttpPost("http://***.***.***.***/backDatabase.php");
    File file = new File("/data/data/com.tigo/databases/exercise");
    
    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cbFile = new FileBody(file);
    mpEntity.addPart("userfile", cbFile);
    
    httppost.setEntity(mpEntity);
    System.out.println("executing request " + httppost.getRequestLine());
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();
    
    System.out.println(response.getStatusLine());
    if (resEntity != null) {
    System.out.println(EntityUtils.toString(resEntity));
    }
    if (resEntity != null) {
    resEntity.consumeContent();
    }
    
    httpclient.getConnectionManager().shutdown();
    }
    }
    

    PHP 代码:

    <?php  
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
      echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n";
      move_uploaded_file ($_FILES['userfile'] ['tmp_name'], $_FILES['userfile'] ['name']); 
    }  else  { 
       echo "Possible file upload attack: "; 
      echo "filename '". $_FILES['userfile']['tmp_name'] . "'.";
     print_r($_FILES); }
     ?>
    

    您可能需要更改路径以满足您的需要,但上述代码有效。

    【讨论】:

    【解决方案3】:

    使用 Android / C# {Xamarin} 在 Web 服务器上上传图像

    这只是一小段代码。它可以将任何图像从 Android 发送到您的网络 使用安卓的服务器

    System.Net.WebClient Client = new System.Net.WebClient();
    Client.Headers.Add("Content-Type", "binary/octet-stream");
    byte[] result = Client.UploadFile("localhost/FolderName/upload.php", "POST", path);
    string s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length);
    

    这里是 PHP 代码 {upload.php}。在中创建一个文件夹名称 { Uploads } 您的应用程序。

    <?php
    
       $uploads_dir = 'uploads/'; //Directory to save the file that comes from client application.      
       if ($_FILES["file"]["error"] == UPLOAD_ERR_OK)       
       {      
         $tmp_name = $_FILES["file"]["tmp_name"];     
         $name = $_FILES["file"]["name"];    
         move_uploaded_file($tmp_name, "$uploads_dir/$name");     
       }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多