Android - 上传图片以及请求数据

时间:2013-11-29 21:43:19

标签: java php android upload

我想通过Android应用程序将图像上传到我的服务器但是我还希望将其他数据与图像一起传递(身份验证,意图等)。

我一直在提出这样的请求:

http://server/script.php?t=authtoken&j_id=12&... etc

但是,我假设我不能简单地使用另一个包含图像字节数组的查询参数,因为这会导致大小为数百万字符的URL。

&image=001101010010110111010001010101010110100101000101010100010... etc

我对如何处理这个问题感到茫然,并希望得到任何建议。如果我无法通过http请求发送数据,我将如何处理传入数据服务器端?

感谢。

1 个答案:

答案 0 :(得分:0)

以下是我如何让那些可能在将来找到它的人工作。

对于此示例,假设我们要使用参数upload.phpwww.server.com查询t=ABC123根目录上的PHP脚本id=12。除此请求外,我们还希望上传存储在java.io.File对象img中的图像。我们也期待服务器的响应,让我们知道上传是否成功。

ANDROID SIDE

在android方面,你需要以下JAR:

apache-mime4j-core-0.7.2.jar

可用here和:

httpclient-4.3.1.jar
httpcore-4.3.jar
httpmime-4.3.1.jar

可用here

以下是有关如何发出多部分请求并获得回复的摘录:

public String uploadRequest(String address, File img)
{
    HttpParams p = new BasicHttpParams();
    p.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    DefaultHttpClient client = new DefaultHttpClient(p);

    HttpPost post = new HttpPost(address);

    // No need to add regular params as parts. You can if you want or
    // you can just tack them onto the URL as usual.
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    builder.addPart("image", new FileBody(img));

    post.setEntity(builder.build());

    return client.execute(post, new ImageUploadResponseHandler()).toString();
}

private class ImageUploadResponseHandler implements ResponseHandler<Object>
{
    @Override
    public Object handleResponse(HttpResponse response) throws ClientProtocolException, IOException
    {
        HttpEntity responseEntity = response.getEntity();
        return EntityUtils.toString(responseEntity);
    }
}

在代码中使用此方法的示例(假设变量img已经声明包含您要上传的图像的File对象:

// Notice regular params can be included in the address
String address = "http://www.server.com/upload.php?t=ABC123&id=12";

String resp = uploadRequest(address, img);

// Handle response

PHP SIDE

对于服务器端脚本,可以通过PHP的$_REQUEST对象正常访问文本参数:

$token = $_REQUEST['token'];
$id = $_REQUEST['id'];

上传的图像可以使用存储在PHP $_FILES对象中的信息进行访问(有关详细信息,请参阅PHP文档):

$img = $_FILES['img'];