Загрузка картинки на сервер.

235
08 декабря 2017, 03:48

Хочу отправить фото из галереи. Вот пример запроса. на который я должна отправить фото

http:/адрес/?user_service=1&user_id=1&files[]=(здесь должно быть фото)

Как быть и чем пользоваться. С сервера я в свою очередь получаю json-ответы.

Answer 1

я использую для этого MultiPart

пример здесь

Answer 2

Ты уже столько вопросов тут задала, что мне кажется, уже сама могла бы во всем разбираться

 /**
     * Asynchronous task to upload file to server
     */
    class UploadImageTask extends AsyncTask<File, Integer, Boolean> {
        /** Upload file to this url */
        private static final String UPLOAD_URL = "http://thibault-laptop:8080/report";
        /** Send the file with this form name */
        private static final String FIELD_FILE = "file";
        private static final String FIELD_LATITUDE = "latitude";
        private static final String FIELD_LONGITUDE = "longitude";
        /**
         * Prepare activity before upload
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            setProgressBarIndeterminateVisibility(true);
            mConfirm.setEnabled(false);
            mCancel.setEnabled(false);
            showDialog(UPLOAD_PROGRESS_DIALOG);
        }
        /**
         * Clean app state after upload is completed
         */
        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            setProgressBarIndeterminateVisibility(false);
            mConfirm.setEnabled(true);
            mDialog.dismiss();
            if (result) {
                showDialog(UPLOAD_SUCCESS_DIALOG);
            } else {
                showDialog(UPLOAD_ERROR_DIALOG);
            }
        }
        @Override
        protected Boolean doInBackground(File... image) {
            return doFileUpload(image[0], UPLOAD_URL);
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            if (values[0] == 0) {
                mDialog.setTitle(getString(R.string.progress_dialog_title_uploading));
            }
            mDialog.setProgress(values[0]);
        }
        /**
         * Upload given file to given url, using raw socket
         * @see https://stackoverflow.com/questions/4966910/androidhow-to-upload-mp3-file-to-http-server
         *
         * @param file The file to upload
         * @param uploadUrl The uri the file is to be uploaded
         *
         * @return boolean true is the upload succeeded
         */
        private boolean doFileUpload(File file, String uploadUrl) {
            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";
            String separator = twoHyphens + boundary + lineEnd;
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024;
            int sentBytes = 0;
            long fileSize = file.length();
            // The definitive url is of the kind:
            // http://host/report/latitude,longitude
            uploadUrl += "/" + mLocation.getLatitude() + "," + mLocation.getLongitude();
            // Send request
            try {
                // Configure connection
                URL url = new URL(uploadUrl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("PUT");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                publishProgress(0);
                dos = new DataOutputStream(conn.getOutputStream());
                // Send location params
                writeFormField(dos, separator, FIELD_LATITUDE, "" + mLocation.getLatitude());
                writeFormField(dos, separator, FIELD_LONGITUDE, "" + mLocation.getLongitude());
                // Send multipart headers
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"" + FIELD_FILE + "\";filename=\""
                        + file.getName() + "\"" + lineEnd);
                dos.writeBytes(lineEnd);
                // Read file and create buffer
                FileInputStream fileInputStream = new FileInputStream(file);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                // Send file data
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                while (bytesRead > 0) {
                    // Write buffer to socket
                    dos.write(buffer, 0, bufferSize);
                    // Update progress dialog
                    sentBytes += bufferSize;
                    publishProgress((int)(sentBytes * 100 / fileSize));
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                }
                // send multipart form data necesssary after file data
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                dos.flush();
                dos.close();
                fileInputStream.close();
            } catch (IOException ioe) {
                Log.e(TAG, "Cannot upload file: " + ioe.getMessage(), ioe);
                return false;
            }
            // Read response
            try {
                int responseCode = conn.getResponseCode();
                return responseCode == 200;
            } catch (IOException ioex) {
                Log.e(TAG, "Upload file failed: " + ioex.getMessage(), ioex);
                return false;
            } catch (Exception e) {
                Log.e(TAG, "Upload file failed: " + e.getMessage(), e);
                return false;
            }
        }
        private void writeFormField(DataOutputStream dos, String separator, String fieldName, String fieldValue) throws IOException
        {
            dos.writeBytes(separator);
            dos.writeBytes("Content-Disposition: form-data; name=\"" + fieldName + "\"\r\n");
            dos.writeBytes("\r\n");
            dos.writeBytes(fieldValue);
            dos.writeBytes("\r\n");
        }
    }
READ ALSO
не верный вывод метода Anagram

не верный вывод метода Anagram

должно получиться Eg

173
ООП в Java, принципы

ООП в Java, принципы

В Java приложении есть класс World, где создаются объекты игры ArrayList с доступом publicЕсть также класс Player

217
Передача данных из php в json через ajax

Передача данных из php в json через ajax

Добрый вечер, подскажите пожалуйста как в js (можно с использованием jQuery) через ajax передать данные массива структуры из php файла в json формате...

390
Распределение процентов между блоками jQuery

Распределение процентов между блоками jQuery

Всем привет, есть задача распределить проценты пропорционально не могу понять как правильно сделать может кто подскажет в каком направлении...

386