Загрузка файлов и других данных с Android по запросу Http POST
Это простой способ публикации файлов с Android.
String url = "http://yourserver.com/upload.php";
File file = new File("myfileuri");
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(file), -1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true); // Send in multiple parts if needed
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
//Do something with response...
} catch (Exception e) {
e.printStackTrace();
}
Что я хочу сделать, это добавить в мой запрос больше переменных POST
. Как мне это сделать? При загрузке простых строк в запрос POST
мы используем URLEncodedFormEntity
.
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
В то время как во время загрузки файлов мы используем InputStreamEntity
.
Кроме того, как я могу специально загрузить этот файл в $_FILES['myfilename']
?
Ответы
Ответ 1
Несколько способов для вас:
-
сделать 2 сообщения: сначала с файлом изображения. Сервер возвращает идентификатор изображения, а второй запрос присоединяется к этому идентификатору ваших параметров.
-
или вместо решения "2 запрос" вы можете использовать запрос MultipartEntity
. Посмотрите здесь больше ссылок
Ответ 2
Поскольку вы хотите загрузить файлы из своего приложения, вот вам хороший учебник:
Загрузка файлов на HTTP-сервер с помощью POST на Android.
Если вы хотите загрузить строки также, я думаю, вы уже знаете решение:)
Ответ 3
наиболее эффективным методом является использование android-async-http
Вы можете использовать этот код для загрузки файла:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
Ответ 4
Проведя полный день, найдите loopj. Вы можете следовать этому образцу кода:
//context: Activity context, Property: Custom class, replace with your pojo
public void postProperty(Context context,Property property){
// Creates a Async client.
AsyncHttpClient client = new AsyncHttpClient();
//New File
File files = new File(property.getImageUrl());
RequestParams params = new RequestParams();
try {
//"photos" is Name of the field to identify file on server
params.put("photos", files);
} catch (FileNotFoundException e) {
//TODO: Handle error
e.printStackTrace();
}
//TODO: Reaming body with id "property". prepareJson converts property class to Json string. Replace this with with your own method
params.put("property",prepareJson(property));
client.post(context, baseURL+"upload", params, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
System.out.print("Failed..");
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
System.out.print("Success..");
}
});
}