从android应用程序上传多个图像文件到php服务器

Posted

技术标签:

【中文标题】从android应用程序上传多个图像文件到php服务器【英文标题】:Upload multiple image file to php server from android app 【发布时间】:2014-04-25 11:41:27 【问题描述】:

我是安卓编程新手。我一直在尝试使用以下代码将多个图像从我的应用程序上传到服务器。这里的 image[] 数组与 namevaluepair 中的其他数据(如用户名、密码等)一起发布到服务器。

Java 代码:

public void post(String url, List<NameValuePair> nameValuePairs) 
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    try 
        MultipartEntity entity = new MultipartEntity(
        HttpMultipartMode.BROWSER_COMPATIBLE);
        for (int index = 0; index < nameValuePairs.size(); index++) 
            if (nameValuePairs.get(index).getName()
                    .equalsIgnoreCase("image[]")) 
                // If the key equals to "image[]", we use FileBody to transfer
                // the data
                Log.d("key", "image");
                Log.d("image path", nameValuePairs.get(index).getName());
                entity.addPart(nameValuePairs.get(index).getName(),
                        new FileBody(new File(nameValuePairs.get(index)
                                .getValue())));

             else 
                // Normal string data
                Log.d("tag", nameValuePairs.get(index).getName());
                // Log.d("tag", nameValuePairs.get(index).getValue());
                entity.addPart(
                        nameValuePairs.get(index).getName(),
                        new StringBody(nameValuePairs.get(index).getValue()));
            
        
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity enttiy = response.getEntity();
        Log.d("server response to post data", EntityUtils.toString(enttiy));
     catch (IOException e) 
        e.printStackTrace();
    

php代码(工作版):

<?php
$target_path = "user_uploaded_photos/";
for($i=0;$i<count($_FILES["image"]["name"]);$i++)
$fileData = pathinfo(basename($_FILES["image"]["name"][$i]));
$username = $_POST['username'];
print_r($fileData);
$date = date('Y_m_d_H_i_s');
$newfilename = $username.$i.$date.".".$fileData['extension'];
if (move_uploaded_file($_FILES["image"]["tmp_name"][$i], $target_path."/".$newfilename))

    echo "The image $_FILES['image']['name'][$i] was successfully uploaded and added to the gallery<br />";

else

 echo "There was an error uploading the file $_FILES['image']['name'][$i], please try again!<br />";

 $location = $_POST['location'];
//other fields and database operations ommitted

我的问题在于我们正在使用的 cakephp 网站。对于 cake php,我使用如下名称值对:

nameValuePair
         .add(new BasicNameValuePair("UserDatum[user_id]", "2"));

像这样发送字符串值对我有用。但是当我声明 images[] 数组图像已上传但无法从 $_FILES 访问时。我已将 images[] 数组声明如下:

for (String s : imagePath) 
            nameValuePair.add(new BasicNameValuePair("UserDatum[images][]",
                    s));
            Log.d("image-path", s);
        

这里的 imagePath 是包含图像路径的字符串数组列表。在应用程序中声明“UserDatum [images] []”是正确的方法吗?它适用于发布的 php,但在 cake php 中只发布字符串值而不发布图像。我尝试过其他库,例如ion .但是我只能在不使用数组结构的情况下上传一张照片。请发表评论或指出正确的方向,以便在单个帖子中发布多个图像和字符串。

【问题讨论】:

当你从你的安卓应用提交数据时,$_FILES 中没有任何内容吗? 在蛋糕 php 服务器中,在 $_FILES 和发布的 php 代码中注意到它就像一个魅力,一切都很好 注意:echo $_FILES['image']['name'][$i] 可能不安全。 【参考方案1】:

每当我从应用发布图像数据时,我都会使用 Base64 编码图像(请参阅:android post Base64 String to PHP)

这可能会给你一条更好的路线。

【讨论】:

以上是关于从android应用程序上传多个图像文件到php服务器的主要内容,如果未能解决你的问题,请参考以下文章

Android 允许将多个文件(最大 150 MB)上传到 PHP 服务器

将图像从 android 上传到 PHP 服务器

将图像从android上传到服务器php时出错?

使用 PHP 上传多个图像,并将条目提交到 mysql

如何使用 asynctask 将图像从 android 上传到 php

将多张图片从图库上传到android中的服务器