Создание почтового запроса, включая загрузку нескольких файлов - PullRequest
0 голосов
/ 24 декабря 2009

Я пишу простой фрагмент, который отправляет простой почтовый запрос.

В настоящее время я создаю запрос следующим образом:

    // Construct data
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");

    // Send data
    URL url = new URL("http://server:8080/servlet/upload");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();

    // do stuff with response....

Это работает, на данный момент. Но мне нужно добавить загрузку файла как составной POST-запрос. Как я могу это сделать? Я хотел бы по возможности избегать использования HttpClient из общего достояния.

Ответы [ 4 ]

3 голосов
/ 24 декабря 2009

В настоящее время вы вообще не используете HTTP. Если вы намерены сделать POST, первое, что вам нужно сделать, это убедиться, что вы отправляете правильные заголовки и тому подобное, так что вы фактически участвуете в HTTP-соединении. Вы должны следовать RFC 1867 (http://tools.ietf.org/html/rfc1867), чтобы правильно кодировать содержимое файла в ваш POST. Это не легко, поэтому есть библиотеки, которые делают это для вас. Поэтому я должен спросить: почему избегать HttpClient? Я всегда использовал это для этой цели. Это надежный, полный и производительный. Вам не хватает места (памяти / диска)?

1 голос
/ 24 декабря 2009

К слову, вам нужно построить выходной поток с данными в формате, указанном в RFC 1687 и RFC 2388 . Это большая работа, я не собираюсь публиковать пример исходного кода, извините :) RFC, однако, содержит четкую информацию и несколько примеров того, как должны выглядеть данные. Это абсолютно выполнимо.

0 голосов
/ 10 декабря 2016

Этот фрагмент кода мне понравился: Загружать файлы, программно отправляя многочастный запрос

Он не имеет каких-либо внешних зависимостей, содержит всего ~ 150 строк кода, включая комментарии, и имхо даже легче обрабатывать, чем библиотека Apache HttpClient.

0 голосов
/ 02 апреля 2012

Попробуйте, как это работает в моем случае

File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);
...