Загрузка с HTTP из Java не работает, если файл содержит «класс» - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь загрузить файлы через HTTP из Eclipse-PlugIn Client. Когда я использую getOutputStream HTTP-запроса для добавления моих файлов, происходит сбой соединения для текстовых файлов, которые содержат строку «класс». Если «class» отсутствует в файле, соединение работает нормально. I

понятия не имею, почему это происходит. На стороне сервера файл будет загружен, ссылка укорочена и может быть открыта. Все работает именно так, как и должно быть, кроме текста «класс».

1 Ответ

0 голосов
/ 13 июля 2011

Убедитесь, что вы используете POST-форму, состоящую из нескольких частей, как в примере ниже:

    final String CHARSET = "ISO-8859-1";
    final String CRLF = "\r\n";
    String formFieldName = "uploadfile";
    String fileName = "upload.jpeg";
    String fileContentType = "image/jpeg";
    URL url = new URL("http://localhost");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setDoInput(true); // if input is expected
    String boundary = "--------------------"+System.currentTimeMillis();
    StringBuilder postData = new StringBuilder();
    postData.append("--").append(boundary).append(CRLF);
    postData.append("Content-Disposition: form-data; name=\"").append(formFieldName).append("\"; filename=\"").append(fileName).append("\"").append(CRLF);
    postData.append("Content-Type: ").append(fileContentType).append(CRLF);
    postData.append(CRLF).append(new String(bytes, CHARSET)).append(CRLF);
    postData.append("--").append(boundary).append("--").append(CRLF);   
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
    connection.setRequestProperty("Content-Length", Integer.toString(postData.length()));
    connection.setFixedLengthStreamingMode(postData.length());
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), CHARSET);
    out.write(postData.toString());
    out.close();
    assert(connection.getResponseCode() == HttpURLConnection.HTTP_OK);
    // if input is expected
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), CHARSET));
    String line;
    while ((line = in.readLine()) != null) {
        System.out.println(line);
    }

Cheers, Max

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