将图片从Android Java应用程序上传到Codeigniter [英] Upload a picture from an Android java application to Codeigniter

查看:87
本文介绍了将图片从Android Java应用程序上传到Codeigniter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

me and my friend have a problem when it comes to uploading a picture from an android application to the Codeigniter framework in php. The problem arises (we think) because it's not an image file and therefore can't be used for image operations.

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

One big notice is that the image upload works when tested with a html-page. And all the other data (like email) are provided and works in the android application. The only thing that do not work is the file upload. But it does work with another php file, but the question I have is how do I take the last php script that work and transform it into codeigniter? I want to use the framework for this, but so far we haven't been able to.

这是上传的Java代码->

Here is the javacode for the upload ->

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方法:

The codeigniter method for uploading:

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相同的效果.

The older php script that works, notice is that the commented code does not work. Since it would probably give the same effect as CI does.

<?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代码,以便我们上传喜欢的图像.感谢您的建议和更多的智慧!

Please help us modify either the CI-function or the java code so we can upload our beloved images. Thanks for your advice and better wisdom!

推荐答案

答案在Java代码中.我需要添加的其他一些参数到文件正文中.

The answer was in the java-code. What I needed to add was some more parameters to the filebody.

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

这完美无瑕. 您可以在以下位置找到有关文件主体构造函数的信息:

This works flawlessly. Information about the filebody constructor you can find here: http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/content/FileBody.html

这篇关于将图片从Android Java应用程序上传到Codeigniter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆