#java #spring #spring-mvc
#java #spring #spring-mvc
Вопрос:
Как я могу получить байт [] из:
< тип ввода=»file» значение=»${restaurant.logo }» имя=»logo» /> в Spring MVC?
Я хочу иметь массив byte [], чтобы преобразовать его в base64. Но я не знаю, как просто преобразовать файл из входных данных в byte[].
Ответ №1:
<form action="uploadLogo">
<input type="file" ... />
</form>
и затем в @Controller
@RequestMapping("/uploadLogo")
public String uploadLogo(@RequestParam MultipartFile logo) {
byte[] bytes = logo.getBytes();
String base64 = new String(Base64.encodeBase64(bytes), "ISO-8859-2");
}
(Base64 является частью commons-codec)
Комментарии:
1. как это сделать с помощью функции MultiActionAndView? Я получил: > общедоступный ModelAndView myrestaurantadd (запрос HttpServletRequest, > ответ HttpServletResponse, ресторан> ресторан)
2. просто добавьте аргумент метода к остальным
3. Когда я ввел requestparam в свои аргументы, я получил ошибку: не удалось создать экземпляр класса bean [org.springframework.web.multipart.MultipartFile]: указанный класс является интерфейсом
4. @RequestMapping(значение=»/myrestaurantadd.htm «, метод=RequestMethod. POST) общедоступная модель myrestaurantadd(запрос HttpServletRequest, ответ HttpServletResponse, ресторан restaurant, логотип @RequestParam MultipartFile) выдает исключение { Пользователь user = loggedUser.getLoggedUser(); байт[] байт = logo.getBytes(); Строка base64 = новая строка (Base64.encode(байты)); ресторан.setLogo(base64); возвращает новую ModelAndView(«перенаправление:mojekonto.htm#окно-три»); }
5. хм. попробуйте поместить его в качестве первого аргумента (а не последнего)
Ответ №2:
Взгляните на org.springframework.web.multipart.MultipartFile , который сможет обернуть загружаемый файл «из коробки» и имеет getBytes()
метод для возврата содержимого файла как byte[]
.
Вы также можете привязать byte[]
поле к загруженному файлу, если вы действительно этого хотите — просто зарегистрировав ByteArrayMultipartFileEditor в качестве пользовательского редактора для вашего binder.