gpt4 book ai didi

java - Android - 上传图像和请求数据

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:18 25 4
gpt4 key购买 nike

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

我通常会这样提出请求:

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

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

&image=001101010010110111010001010101010110100101000101010100010... etc

我不知道应该如何处理这个问题,并且希望得到任何建议。如果我无法通过 http 请求发送数据,我将如何在服务器端处理传入的数据?

谢谢。

最佳答案

以下是我如何让它为那些将来可能会发现它的人发挥作用的方法。

对于此示例,假设我们要查询 PHP 脚本 upload.phpwww.server.com 的根上参数为t=ABC123id=12 。除了这个请求之外,我们还想上传存储在 java.io.File 中的图像。对象img 。我们还期待服务器的响应,让我们知道上传是否成功。

安卓端

在 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 .

以下是有关如何发出多部分请求并获取响应的代码 fragment :

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 端

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

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

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

$img = $_FILES['img'];

关于java - Android - 上传图像和请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com