#android
#Android
Вопрос:
Я пытаюсь загрузить выбранный файл на сервер, и, похоже, я столкнулся со стеной, когда дело доходит до запуска операции загрузки при нажатии кнопки «uploadbtn», поэтому вопрос в том, каким корням я должен следовать, чтобы успешно загрузить выбранный файл? любые советы приветствуются. Я завершил php и mysql часть этого приложения, ниже приведена большая часть моего кода, за исключением кода php и mysql.
public void onClick(View v) {
switch (v.getId()) {
case R.id.filetoupload:
Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT);
fileintent.setType("application/*");
startActivityForResult(fileintent, RESULT_LOAD_FILE);
break;
case R.id.uploadbut:
break;
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RESULT_LOAD_FILE:
if (requestCode == RESULT_LOAD_FILE amp;amp; resultCode == RESULT_OK
amp;amp; null != data) {
Uri selectedPdf = data.getData();
filetoupload.setVisibility(View.VISIBLE);
if (selectedPdf.getLastPathSegment().endsWith("pdf")) {
System.out.println("Uri of selected pdf---->" selectedPdf.toString());
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Invalid file type", Toast.LENGTH_SHORT).show();
}
}
}
}
Ответ №1:
Я бы посоветовал использовать библиотеку apache для загрузки вашего файла на сервер.
Итак, вам нужно: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.5.2
https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.4.5
https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime/4.5.2
https://mvnrepository.com/artifact/org.apache.james/apache-mime4j-core/0.7.2
часть кода:
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
//some field
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("a_simple_text", new StringBody("sometext",ContentType.TEXT_PLAIN));
//some file
builder.addPart("upload_file", new ByteArrayBody(b,path));
HttpEntity entity = builder.build();
HttpPost post = new HttpPost(url);
OProgressHttpEntityWrapper.ProgressCallback progressCallback = new OProgressHttpEntityWrapper.ProgressCallback() {
@Override
public void progress(float progress, float totalprogress , long transferred,
long totalBytes, long cut_data, long length) {
Log.d(TAG, "progress " progress " totalprogress " totalprogress " transferred " transferred " totalBytes " totalBytes " cut_data " cut_data " length " length);
}
};
post.setEntity(new OProgressHttpEntityWrapper(entity, progressCallback, cut_data, length));
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
String html = EntityUtils.toString(response.getEntity());
Комментарии:
1. понятно, так это самый эффективный способ загрузки моих файлов на сервер?
2. Имо, это самое полезное решение. Это помогает реализовать составную форму для запроса POST.
3. Причина в том, что правильный способ — это использовать составную форму. Тем не менее, вы можете использовать простой запрос get для получения битовых данных.
4. дело в том, что у меня практически нет опыта работы с apache, поэтому я должен выбрать «простое» решение, где я могу получить код шаблона, который я могу использовать в своем коде?
5. Я написал вам простой пример. просто загрузите 4 файла jar и добавьте в проект