Pull to refresh

POST из java

Reading time2 min
Views1.8K
Сегодня поделюсь вот таким опытом. Услышав модное слово REST, решили тут же применить этот тренд в проекте. В проекте необходимо было хранить картинки для соответствующих ресурсов. И было выбрано такое соглашение:
  • GET http://localhost/res/image/1001
    — позволяет скачать картинку (файл jpg) для ресурса за номером тысяча один
  • POST http://localhost/res/image/1001
    — принять и сохранить (заменить, если была) картинку
  • DELETE http://localhost/res/image/1001
    — соответственно удалить

Модель, кстати, себя оправдала. Пользуемся по сей день. А вот в процессе разработки возник вопрос как же это чудо попробовать, протестировать. Тем более реализация этой функциональности на клиенте (Flex, btw) ещё не была готова.



Подобное решение решение найдено на просторах интернета: http://www.devx.com/Java/Article/17679/1954

Простая «библиотека» из одного класса, без дополнительных зависимостей, одним методом посылает файл запросом POST как это делает браузер или клиент Flex в нашем слечае.

InputStream serverInput = ClientHttpRequest.post(
new java.net.URL(urlString),
new Object[]{
"name", "J.Doe",
"email", "abuse@spamcop.com",
"test.txt", new
File("c:\w\image.jpg")
});


Сервлет принимает:

-----------------------------k8rws1oxpkuv1g53x0ud6a004-j12py3q5jcay
Content-Disposition: form-data; name="name"

J.Doe
-----------------------------k8rws1oxpkuv1g53x0ud6a004-j12py3q5jcay
Content-Disposition: form-data; name="email"

abuse@spamcop.com
-----------------------------k8rws1oxpkuv1g53x0ud6a004-j12py3q5jcay
Content-Disposition: form-data; name="test.txt"; filename="image.jpg"
Content-Type: image/jpeg

яШяа...


Для полноты картины скажу, что на стороне сервера используется библиотека apache commons fileupload:

ServletFileUpload upload = new ServletFileUpload();

FileItemIterator iter = upload.getItemIterator(httpServletRequest);
while (iter.hasNext()) {
  FileItemStream item = iter.next();
  if (!item.isFormField()) {
    InputStream stream = item.openStream();

    // файл
  }
}


* This source code was highlighted with Source Code Highlighter.
Tags:
Hubs:
+3
Comments10

Articles