Сегодня поделюсь вот таким опытом. Услышав модное слово REST, решили тут же применить этот тренд в проекте. В проекте необходимо было хранить картинки для соответствующих ресурсов. И было выбрано такое соглашение:
Модель, кстати, себя оправдала. Пользуемся по сей день. А вот в процессе разработки возник вопрос как же это чудо попробовать, протестировать. Тем более реализация этой функциональности на клиенте (Flex, btw) ещё не была готова.
Подобное решение решение найдено на просторах интернета: http://www.devx.com/Java/Article/17679/1954
Простая «библиотека» из одного класса, без дополнительных зависимостей, одним методом посылает файл запросом POST как это делает браузер или клиент Flex в нашем слечае.
Сервлет принимает:
Для полноты картины скажу, что на стороне сервера используется библиотека apache commons fileupload:
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.