Как отправить изображение или текстовый файл в Android

На самом деле я разрабатываю приложение, которое отправляет форму отправки в виде пары "имя-значение", используя json для связи с сервером. Но проблема в том, что теперь я хочу отправить изображение или текстовый файл во время отправки формы, как мне отправить изображение или текстовый файл во время отправки формы. Есть ли правильная процедура для этого?


person Strawberry    schedule 15.05.2014    source источник
comment
да, вы можете отправить изображение и текстовый файл как с помощью почтового метода. Но это слишком сложно, чтобы объяснить здесь.   -  person Pratik Dasa    schedule 15.05.2014
comment
проверьте этот stackoverflow.com/a/18050865/1665507   -  person Spring Breaker    schedule 15.05.2014


Ответы (2)


Попробуйте ниже код для загрузки изображения на сервер:

private class ImageUploader extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub
            String result = "";

            // Client-side HTTP transport library
            HttpClient httpClient = new DefaultHttpClient();

            // using POST method
            HttpPost httpPostRequest = new HttpPost(imagePostUrl);
            try {

                // creating a file body consisting of the file that we want to
                // send to the server
                FileBody bin = new FileBody(imageFile);

                /**
                 * An HTTP entity is the majority of an HTTP request or
                 * response, consisting of some of the headers and the body, if
                 * present. It seems to be the entire request or response
                 * without the request or status line (although only certain
                 * header fields are considered part of the entity).
                 * 
                 * */
                MultipartEntityBuilder multiPartEntityBuilder = MultipartEntityBuilder.create();
                multiPartEntityBuilder.addPart("images[1]", bin);
                httpPostRequest.setEntity(multiPartEntityBuilder.build());

                // Execute POST request to the given URL
                HttpResponse httpResponse = null;
                httpResponse = httpClient.execute(httpPostRequest);

                // receive response as inputStream
                InputStream inputStream = null;
                inputStream = httpResponse.getEntity().getContent();

                if (inputStream != null)
                    result = convertInputStreamToString(inputStream);
                else
                    result = "Did not work!";
                return result;
            } catch (Exception e) {

                return null;
            }

            // return result;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            uploadStatus.setText("Uploading image to server");
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            uploadStatus.setText(result);
        }

    }

    private static String convertInputStreamToString(InputStream inputStream)
            throws IOException {
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }
person Pratik Dasa    schedule 15.05.2014
comment
@pratik MultipartEntityBuilder не может быть преобразован в тип. Будет ли MultipartEntityBuilder работать в Android 2.3.3? - person Strawberry; 15.05.2014
comment
@Strawberry вам нужно скачать файлы httpclient и httpmime jar и поместить их в папку lib, а затем добавить в путь сборки. После этого вы получите все эти классы для использования. - person Pratik Dasa; 15.05.2014

Для файла попробуйте следующий код:

String url = "http://yourserver";
File file = new File(Environment.getExternalStorageDirectory(),
        "yourfile");
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) {
    // show error
}
person Pratik Dasa    schedule 15.05.2014