powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Передача файла на HTTP через POST
7 сообщений из 7, страница 1 из 1
Передача файла на HTTP через POST
    #39510589
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передаю на http параметры через POST.
А как передать файл, чтобы на сервере его получить в $_FILES ?
В инете есть примеры, но требуют импорта библиотек.
Вот мой пример. Как можно его доработать с учетом передачи файла?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param1", "value1"));
params.add(new BasicNameValuePair("param2", "value2"));
 
JSONParser jParser = new JSONParser();
// посылаем запрос методом POST
String json = jParser.makeHttpRequest("http://my_domain.com/script.php", "POST", params);
JSONObject result = jParser.getParingJSON_Object(json);



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
class JSONParser {
 
    private static InputStream is = null;
    private static String json = "";
 
    // конструктор
    public JSONParser() {
 
    }
 
    // =========================================================
    // Получение ответа от сервера в формате String
    // =========================================================
 
    /**
     * Получить ответ по ссылке в формате json
     *
     * @param url    запрашиваемая страница
     * @param method GET or POST
     * @param params параметры, которые необходимо передать
     */
    public String makeHttpRequest(String url, String method, List<NameValuePair> params) {
 
        // создаём HTTP запрос
        try {
 
            if (method.equals("POST")) {
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
 
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                if (httpEntity != null)
                    is = httpEntity.getContent();
 
            } else if (method.equals("GET")) {
 
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "UTF-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = null;
                if (httpResponse != null)
                    httpEntity = httpResponse.getEntity();
                if (httpEntity != null)
                    is = httpEntity.getContent();
            }
 
        } catch (UnsupportedEncodingException e) {
            // обработка ошибки
        } catch (ClientProtocolException e) {
            // обработка ошибки
        } catch (IOException e) {
            // обработка ошибки
        }
 
        if (is != null) {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
                json = sb.toString();
                if (is != null)
                    is.close();
            } catch (Exception e) {
            // обработка ошибки
            }
        }
 
        return json;
    }
 
    // =========================================================
    // Парсинг ответа от сервера из String в JSONObject
    // =========================================================
    public JSONObject getParingJSON_Object(String json) {
 
        JSONObject result = null;
 
        try {
            result = new JSONObject(json);
        } catch (JSONException e) {
            // обработка ошибки
        }
 
        return result;
    }
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39510711
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я верно понял: хочешь передать файл в json, но так, чтобы он был доступен в php как обычный бинарник?
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39510779
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Я не json передаю.
В json я получаю ответ от сервера.
Но это не главное. Мне бы на сервер передать как положено.
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39510844
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slon747,

Вообще в инете куча примеров как передать файл по http
1.Во первых они базируються на AsyncTask
2.Во вторых без ProggresbarА оно вообще не должно делаться

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
private  class UploadFile extends AsyncTask<String, Integer, String> {
        URL connectURL;
        String responseString="";
        String Title;
        String Description="";
        byte[] dataToServer;
        FileInputStream fileInputStream = null;
        private PowerManager.WakeLock mWakeLock;
        private Context context;
        UploadFile(Context context){
            this.context=context;

        }
        @Override
        protected String doInBackground(String... urls) {
            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            DataInputStream inStream = null;
            // String existingFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Bluetooth/my.txt";
            String existingFileName = "/sdcard/inventar.db";
            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024;
            String responseFromServer = "";
          //  String urlString = "http://192.168.0.101:8079/upload";
            String urlString = urls[0];
            String filename = urls[1];

            try {
                File file=new File(existingFileName);
                long fileLength= file.length();

                FileInputStream fileInputStream = new FileInputStream(file);

                URL url = new URL(urlString);

                conn = (HttpURLConnection) url.openConnection();

                conn.setDoInput(true);

                conn.setDoOutput(true);

                conn.setUseCaches(false);

                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                dos = new DataOutputStream(conn.getOutputStream());
                dos.writeBytes(twoHyphens + boundary + lineEnd);

                dos.writeBytes("Content-Disposition: form-data; name=\"description\"" + lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(Description);
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);
               //  String filestr="inventarsaveyyy.db";
                String filestr=filename;
                dos.writeBytes("Content-Disposition: form-data; name=\"fileName\"; filename=\"" + filestr /*existingFileName*/ + "\"" + lineEnd);
                dos.writeBytes(lineEnd);


                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                // read file and write it into form...
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                int total=0;

                while (bytesRead > 0) {

                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                    total=total+bytesAvailable;
                    publishProgress((int) (total * 100 / fileLength));

                }

                // send multipart form data necesssary after file data...
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                // close streams
                Log.e("Debug", "File is written");
                fileInputStream.close();
                dos.flush();
                dos.close();
                // Toast.makeText(context,"File upload", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                //  Toast.makeText(context,e.getMessage()+"error", Toast.LENGTH_SHORT).show();
                //return   "Ошибка "+e.getMessage();
            }

            //------------------ read the SERVER RESPONSE
            try {

                inStream = new DataInputStream(conn.getInputStream());
                String str;

                while ((str = inStream.readLine()) != null) {
                    System.out.println(str);
                    responseString=responseString+str+"\r\n";
                    // Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
                }

                inStream.close();

            } catch (Exception ioex) {

                //        Toast.makeText(context, ioex.getMessage() + "error", Toast.LENGTH_SHORT).show();
                return   "Ошибка "+ioex.getMessage();
            }
            return null;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // take CPU lock to prevent CPU from going off if the user
            // presses the power button during download
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    getClass().getName());
            mWakeLock.acquire();
            mProgressDialog.show();
        }
        @Override
        protected void onProgressUpdate(Integer... progress) {
            super.onProgressUpdate(progress);
            // if we get here, length is known, now set indeterminate to false
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.setMax(100);
            mProgressDialog.setProgress(progress[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            mWakeLock.release();
            mProgressDialog.dismiss();
            if (result != null)
                Toast.makeText(context,"Ошибка загрузки: "+result, Toast.LENGTH_LONG).show();
            else {
                Toast.makeText(context, "File Загружен " + responseString, Toast.LENGTH_SHORT).show();
                try {
                    WorkDB.update_scn();
                    Toast.makeText(context, " SCN обновлён ", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(context, " Проблема при обновлении SCN ", Toast.LENGTH_SHORT).show();
                }
            }
        }





Пуск во такой
Код: java
1.
2.
prepareprogressdialog();
        final UploadFile uploadFile=new UploadFile(LoadUpload.this);


Где

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
void prepareprogressdialog() {
        mProgressDialog = new ProgressDialog(LoadUpload.this);
        mProgressDialog.setMessage("Загружаю...");
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setCancelable(true);


    }
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39510849
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al,

Да, я в асинхронном и делаю.
Спасибо за пример. Буду пробовать.
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39510853
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slon747,

Запуск недокопировался
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 prepareprogressdialog();
        final UploadFile uploadFile=new UploadFile(LoadUpload.this);
//Получаю имена фалов и urlов из настроек.
        String url=MainActivity.getShp().getString("upload","http://10.0.3.1:8079/upload");
        String filename="inventarsave.db";
        String filestr=MainActivity.getShp().getString("file",filename);
//Сам пуск
        uploadFile.execute(url,filestr);
//Отмена загрузки
        mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                uploadFile.cancel(true);
});
...
Рейтинг: 0 / 0
Передача файла на HTTP через POST
    #39511619
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al,

Большое спасибо!
Всё работает.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Передача файла на HTTP через POST
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]