В VS2010, когда я щелкаю правой кнопкой мыши по файлу web.config, опция «Добавить преобразования конфигурации» неактивна. Я знаю о том, что Spring MVC может предложить и что мне нужно сделать, чтобы мои контроллеры могли работать ...
Я интегрировал Spring в приложение и должен был повторить загрузку файлов из форм.
Я знаю, что Spring MVC может предложить и что мне нужно сделать, чтобы мои контроллеры могли загружать файлы. Я прочитал достаточное количество учебников, чтобы сделать это, но то, что ни один из этих учебников не объясняет, это правильные / лучшие методики о том, как / что нужно сделать, чтобы действительно обработать файл, как только он у вас будет. Ниже приведен некоторый код, похожий на код, найденный в Spring MVC Docs для обработки загрузки файлов, который можно найти в
Spring MVC File Upload
В приведенном ниже примере вы можете видеть, что они показывают вам все, что нужно для получения файла , но они просто говорят Сделай что-нибудь с бином
Я проверил много уроков, и все они, кажется, помогают мне понять это, но то, что я действительно хочу знать, - это лучший способ обработки файла. Как только у меня есть файл на данный момент, Каков наилучший способ сохранить этот файл в каталоге на сервере? Может кто-нибудь помочь мне с этим? Спасибо
public class FileUploadController extends SimpleFormController {
protected ModelAndView onSubmit(
HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors) throws ServletException, IOException {
// cast the bean
FileUploadBean bean = (FileUploadBean) command;
let's see if there's content there
byte[] file = bean.getFile();
if (file == null) {
// hmm, that's strange, the user did not upload anything
}
//do something with the bean
return super.onSubmit(request, response, command, errors);
}
Это то, что я предпочитаю при загрузке. Я думаю, что поручить сохранение файлов Spring — лучший способ. Spring делает это с помощью функции MultipartFile.transferTo(File dest)
.
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping("/upload")
public class UploadController {
@ResponseBody
@RequestMapping(value = "/save")
public String handleUpload(
@RequestParam(value = "file", required = false) MultipartFile multipartFile,
HttpServletResponse httpServletResponse) {
String orgName = multipartFile.getOriginalFilename();
String filePath = "/my_uploads/" + orgName;
File dest = new File(filePath);
try {
multipartFile.transferTo(dest);
} catch (IllegalStateException e) {
e.printStackTrace();
return "File uploaded failed:" + orgName;
} catch (IOException e) {
e.printStackTrace();
return "File uploaded failed:" + orgName;
}
return "File uploaded:" + orgName;
}
}
но то, что ни в одном из этих руководств не объясняется, является правильным/наилучшим практическим методом того, как/что нужно сделать для фактической обработки файла, когда он у вас есть
наилучший метод зависит от о том, что вы пытаетесь сделать. Обычно я использую некоторые АОП для пост-обработки загруженного файла. Затем вы можете использовать FileCopyUtils для сохранения вашего загруженного файла
@Autowired
@Qualifier("commandRepository")
private AbstractRepository<Command, Integer> commandRepository;
protected ModelAndView onSubmit(...) throws ServletException, IOException {
commandRepository.add(command);
}
АОП описывается следующим образом
@Aspect
public class UploadedFileAspect {
@After("execution(* br.com.ar.CommandRepository*.add(..))")
public void storeUploadedFile(JoinPoint joinPoint) {
Command command = (Command) joinPoint.getArgs()[0];
byte[] fileAsByte = command.getFile();
if (fileAsByte != null) {
try {
FileCopyUtils.copy(fileAsByte, new File("<SET_UP_TARGET_FILE_RIGHT_HERE>"));
} catch (IOException e) {
/**
* log errors
*/
}
}
}
Не забудьте включить аспект (при необходимости обновите схему до Spring 3.0) Поместите в путь к классам aspectjrt.jar и aspectjweaver .jar (
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<aop:aspectj-autoproxy />
<bean class="br.com.ar.aop.UploadedFileAspect"/>