我已经阅读了很多帖子来实现任务,比如在android中使用multipartentity和josn上传图像以及参数,但我的问题是当我尝试上传图像和参数而不将字符串转换为JSONobject
然后图像上传没有错误,但当我试图将响应字符串添加到jsonobject时,在logcat中发生错误,如:)
error: Value`<form of type java.lang.String cannot be converted to JSONObject.
任何人请帮忙解决这个问题?我想将图像和JsonObjec
t发送到带有MultipartEntity
的PHP服务器。我正在开发一个应用程序,允许用户使用H ttpPost
方法上传图像。我使用MultipartEntity
,因此我将库apache-mime4j-0.6.1.jar,httpclient-4.3.1.jar,httpcore-4.3.1.jar和httpmime-4.2.1.jar添加到我的应用程序中。
这是我的代码:
public JSONObject doFileUpload(String _fname, String _lname, String _email,
String _password, String _country, String _countrycode,
String _phone) {
File file1 = new File(selectedPath);
String urlString = "http://capstonehostingservices.com/fetch_new/app/index.php/fetch/register";
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(urlString);
FileBody bin1 = new FileBody(file1);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("photo", bin1);
reqEntity.addPart("first_name", new StringBody(_fname));
reqEntity.addPart("last_name", new StringBody(_lname));
reqEntity.addPart("email", new StringBody(_email));
reqEntity.addPart("password", new StringBody(_password));
reqEntity.addPart("country", new StringBody(_country));
reqEntity.addPart("country_code", new StringBody(_countrycode));
reqEntity.addPart("phone", new StringBody(_phone));
post.setEntity(reqEntity);
HttpResponse response = client.execute(post);
resEntity = response.getEntity();
String response_str = EntityUtils.toString(resEntity);
json = new JSONObject(response_str);
} catch (Exception ex) {
Log.e("Debug", "error: " + ex.getMessage(), ex);
}
return json;
}
在上面的代码我试图将响应字符串转换为jsonobject,如何实现这一目标?
我使用selectedpath参数从gallary获取图像路径,我想将图像和JsonObject
发送到带有MultipartEntity
的PHP服务器。我正在开发一个应用程序,允许用户使用HttpPost
方法上传图像。我使用MultipartEntity
,因此我将库apache-mime4j-0.6.1.jar,httpclient-4.3.1.jar,httpcore-4.3.1.jar和httpmime-4.2.1.jar添加到我的应用程序中。
答案 0 :(得分:2)
这可能不是最佳答案,但它是一个很好的例子,可以开始使用。
使用以下函数将文件发送到服务器:
public static void postFile(String fileName) throws Exception {//fileName is path+filename of picture
String url_upload_image = "http://url-to-api/upload_photo.php";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url_upload_image);
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder
.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("file", new FileBody(new File(fileName)));
post.addHeader("id", id);//id is anything as you may need
post.setEntity(multipartEntity.build());
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
entity.consumeContent();
client.getConnectionManager().shutdown();
}
位于http://url-to-api/upload_photo.php
<?php
$name = $_POST['id'];
$file_path = "images/";
$file_path = $file_path . basename( $_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $file_path)) {
echo "success";
echo $name;
} else{
echo "fail";
}
?>
并确保服务器中的目录或文件夹是可执行文件,可写文件和可读文件。我认为这是主要问题。这是被称为777许可 ..相信我,这和其他事情一样重要。