java - 将图片从 Android java 应用程序上传到 Codeigniter

标签 java php android codeigniter post

我和我的 friend 在将图片从 Android 应用程序上传到 PHP 中的 Codeigniter 框架时遇到了问题。问题的出现(我们认为)是因为它不是图像文件,因此不能用于图像操作。

一个重要的注意事项是,在使用 html 页面进行测试时,图像上传可以正常工作。所有其他数据(如电子邮件)均在 Android 应用程序中提供并运行。唯一不起作用的是文件上传。但它确实可以与另一个 php 文件一起使用,但我的问题是如何获取最后一个有效的 php 脚本并将其转换为 codeigniter?我想为此使用该框架,但到目前为止我们还无法做到。

这是上传的java代码->

HttpClient httpClient = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost("http://url.com/controller-name");

try
{
  CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener()
  {
    @Override
    public void transferred(long num)
    {
      publishProgress((int) ((num / (float) totalSize) * 100));
    }
  });

  // We use FileBody to transfer an image
  multipartContent.addPart("userfile", new FileBody(new File(filename)));
  totalSize = multipartContent.getContentLength();
  multipartContent.addPart("email", new StringBody("email@email.com"));
  multipartContent.addPart("submit", new StringBody("upload"));

  // Send it
  httpPost.setEntity(multipartContent);
  HttpResponse response = httpClient.execute(httpPost, httpContext);
  String serverResponse = EntityUtils.toString(response.getEntity());

  Log.i("SERVER", "Response: " + response.toString());
  return serverResponse;
}

catch (Exception e)
{
  System.out.println(e);
}

codeigniter上传方法:

function do_upload() {
    $image_name = time() . $this->get_random_string();
    $config = array(
        'file_name' => $image_name,
        'allowed_types' => 'jpg|jpeg|gif|png',
        'upload_path' => $this->gallery_path

    );
    $this->load->library('upload', $config);
    $this->upload->do_upload();
    $image_data = $this->upload->data();
    $config = array(
        'source_image' => $image_data['full_path'],
        'new_image' => $this->gallery_path . '/thumbs',
        'maintain_ratio' => false,
        'width' => 300,
        'height' => 300
    );

    $this->load->library('image_lib', $config);
    $this->image_lib->resize();
    echo $this->image_lib->display_errors();

    $image_name = $image_name . $image_data['file_ext'];
    //Insert into the database
    $data = array(
        'image_name' => $image_name,
        'upload_email' => $this->input->post('email'),
        'ip' => $this->input->ip_address()
    );

    // Insert the new data of the image!
    $insert = $this->db->insert('table', $data);
    $short_url = $this->alphaID($this->db->insert_id());

    return $short_url;

}

旧的 php 脚本可以工作,请注意,注释的代码不起作用。因为它可能会产生与 CI 相同的效果。

<?php
/*if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "application/octet-stream")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{*/
    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("images/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["file"]["tmp_name"],
                "images/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "images/" . $_FILES["file"]["name"];
        }
    }
/*}
else
{
    echo "Invalid file";
}*/
?> 

请帮助我们修改 CI 函数或 java 代码,以便我们可以上传我们喜爱的图像。感谢您的建议和更好的智慧!

最佳答案

答案就在 java 代码中。我需要向文件体添加更多参数。

  multipartContent.addPart("userfile", new FileBody(new File(filename), filename, "image/jpeg", "utf-8"));

这可以完美地工作。 您可以在这里找到有关 filebody 构造函数的信息:http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/content/FileBody.html

关于java - 将图片从 Android java 应用程序上传到 Codeigniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660196/

相关文章:

android - 如何在 Android 中制作 YouTube 视频缩略图?

java - 如何在 Android 应用程序中指定和添加自定义打印机?

带 sleep 的 Java 循环

java - 如何避免工厂模式中的 Java 泛型警告

php - Zend Framework 2 CSRF 保护

php - PHP 计算重复值

java - 安卓媒体播放器

java - 如何将项目添加到我的操作栏?

javascript - AJAX/PHP 多表单 POST 提交

android - 位图:out of memory error.如何在android中压缩后获取原始图像大小