Android 2.2 SDK / JAVA - ошибка при загрузке файла / публикации параметров через HttpUrlConnection - PullRequest
0 голосов
/ 03 января 2011

Я получаю эту ошибку, хотя в моем postMap я определенно указываю post var "eventTitle", что, черт возьми, происходит?:

01-03 11: 52: 29.758: INFO / System.out (27682): сервер Ответ: Предупреждение : htmlspecialchars (): недопустимый многобайтовый последовательность в аргументе в / дома / постановка / public_html / система / библиотека / request.php на линии 31 Предупреждение : session_start (): не удается отправить сеанс cookie - заголовки уже отправлены (вывод начался в /home/staging/public_html/index.php:100) в / дома / постановка / public_html / система / библиотека / session.php на линии 11 Предупреждение : session_start (): не удается отправить сеанс ограничитель кэша - заголовки уже отправлены (вывод начался в /home/staging/public_html/index.php:100) в / главная / постановка / public_html / система / библиотека / session.php на линии 11 Предупреждение : Невозможно изменить информацию заголовка - заголовки уже отправлены (вывод началось в /home/staging/public_html/index.php:100) в / главная / постановка / public_html / index.php на линии 181 Предупреждение : Невозможно изменить информацию заголовка - заголовки уже отправлены (вывод началось в /home/staging/public_html/index.php:100) в / дома / постановка / public_html / система / библиотека / currency.php онлайн 45 846

public String postHTTPMultipart(LinkedHashMap<String, String> postMap, String apiCall, String token, String imagePath) {

     private String header1 = "api-key";
     private String apiKey = "xxx";
     private String header2 = "User-agent";
    private String headerValue2 = "Testing";
     private String header3 = "Accept:";
     private String headerValue3 = "application/json";
     private String header4 = "session-token";

        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        DataInputStream inStream = null;

        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";

        int bytesRead, bytesAvailable, bufferSize;

        byte[] buffer;

        int maxBufferSize = 1 * 1024 * 1024;

        try {

            // ------------------ CLIENT REQUEST

            FileInputStream fileInputStream = new FileInputStream(new File(imagePath));

            //open a URL connection to the Servlet
            URL url = new URL(apiCall);

            //open a HTTP connection to the URL
            conn = (HttpURLConnection) url.openConnection();

            //allow Inputs
            conn.setDoInput(true);

            //allow Outputs
            conn.setDoOutput(true);

            //don't use a cached copy.
            conn.setUseCaches(false);

            //use a post method.
            conn.setRequestMethod("POST");
            conn.addRequestProperty(header1, apiKey);
            conn.addRequestProperty(header2, headerValue2);
            conn.addRequestProperty(header3, headerValue3);
            conn.addRequestProperty(header4, token);

            conn.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);

            //add post parameters
            String urlParameters = null;
            for (Entry<String, String> entry : postMap.entrySet()) {

                String key = entry.getKey();
                String value = entry.getValue();

                String append = key + "=" + URLEncoder.encode(value, "UTF-8") + "&";

                if (urlParameters != null) {
                    urlParameters = urlParameters + append;
                } else {
                    urlParameters = append;
                }

            }

            urlParameters = urlParameters.substring(0, urlParameters.length() - 1);

            dos = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"file\";" + " eventImage=\"" + imagePath + "\"" + lineEnd);

            dos.writeBytes(lineEnd);

            // create a buffer of maximum size
            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);

            while (bytesRead > 0) {
                dos.write(buffer, 0, bufferSize);
                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);

            //add post parameters here?
            dos.writeBytes(twoHyphens + boundary + lineEnd + urlParameters + lineEnd);

            // close streams
            fileInputStream.close();
            dos.flush();
            dos.close();

        } catch (MalformedURLException ex) {
            System.out.println("From ServletCom CLIENT REQUEST:" + ex);
        }

        catch (IOException ioe) {
            System.out.println("From ServletCom CLIENT REQUEST:" + ioe);
        }

        // ------------------ read the SERVER RESPONSE

        String response = null;
        try {
            inStream = new DataInputStream(conn.getInputStream());
            while ((response = inStream.readLine()) != null) {
                System.out.println("Server response is: " + response);
                System.out.println("");
            }
            inStream.close();

        } catch (IOException ioex) {
            Log.e("IOException", "Exception", ioex);
            System.out.println("From (ServerResponse): " + ioex);

        }

        return response;
}

1 Ответ

0 голосов
/ 03 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...