【发布时间】:2013-01-12 02:06:03
【问题描述】:
用户可以通过相机在android端拍摄5-6张照片。所以,我使用了 ACTION_IMAGE_CAPTURE。在 onActivityResult 我这样做是为了收集相机拍摄的图像的位图。假设第一张照片和第二张照片如下。
if(requestCode == 1)
{
bitMap1 = (Bitmap)extras.get("data");
imageView1.setImageBitmap(bitMap1);
globalvar = 2;
}
if(requestCode == 2)
{
bitMap1 = (Bitmap)extras.get("data");
imageView2.setImageBitmap(bitMap2);
globalvar = 2;
}
要将这些图像发送到 php 服务器,我执行以下操作..
protected String doInBackground(Integer... args) {
// Building Parameters
ByteArrayOutputStream bao1 = new ByteArrayOutputStream();
bitMap1.compress(Bitmap.CompressFormat.JPEG, 90, bao1);
byte [] bytearray1 = bao1.toByteArray();
String stringba1 = Base64.encode(bytearray1);
ByteArrayOutputStream bao2 = new ByteArrayOutputStream();
bitMap2.compress(Bitmap.CompressFormat.JPEG, 90, bao2);
byte [] bytearray2 = bao2.toByteArray();
String stringba2 = Base64.encode(bytearray2);
String parameter1 = "tenant";
String parameter2 = "price";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("person",parameter1));
params.add(new BasicNameValuePair("price",parameter2));
params.add(new BasicNameValuePair("image1",stringba1));
params.add(new BasicNameValuePair("image2",stringba2));
JSONObject json = jParser.makeHttpRequest(requiredurl, "POST", params);
Log.d("Details", json.toString());
int success = json.getInt("connected");
if (success == 1) {
//blah blah
}
}
这里是 makeHttpRequest() 方法:
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method == "POST"){
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
................
....................... // Here the result is extracted and made it to json object
.............................
// return JSON
return jObj; // returning the json object to the method that calls.
}
下面是sn-p的php代码:
$name = $_POST[person];
$price = $_POST[price];
$binary1 = base64_decode($image2);
$binary2 = base64_decode($image2);
$file1 = tempnam($uploadPath, 'image2');
$fp1 = fopen($file1, 'wb');
fwrite($fp1, $binary1);
fclose($fp1);
.................
............................
但是我无法将图像存储在服务器端文件夹中。即使我在一些链接中看到说上传多张图片时 Base64 不是可取的方式。有人可以建议我如何进行吗?已经看过this 和许多其他链接,但无法满足我的要求,因为我什至必须发送一些数据(如人名、价格)以及这些图像。非常感谢您对此提供任何帮助。
注意:即使有人可以建议我如何将上面的临时文件($file1)保存在服务器文件夹中,我也会非常感激。
【问题讨论】:
-
使用标准的 HTTP 帖子。 base64 将数据大小增加了大约 33%。如果您的应用超出了他们的数据上限,您的用户将不会高兴。
-
你为什么不使用 multipartEntity??
-
@MarcB 我只使用 HttpPost,对吧?它在我的代码中。那么,这不是标准吗?请建议我继续进行的解决方案。我一直在为此苦苦挣扎。
-
好吧,您不是在进行标准的多部分类型文件上传。
-
@Marc B 分段上传不是默认base64编码的吗?