subir present parameter not mvc multipartfile imagen example español con archivos spring file tomcat image-uploading

present - subir archivos con spring mvc



Spring MVC guarda el archivo MultipartFile cargado en una carpeta específica (5)

Quiero guardar imágenes cargadas en una carpeta específica en una aplicación Spring 3 MVC desplegada en Tomcat

Mi problema es que no puedo guardar los archivos de imágenes cargados en el host donde se está ejecutando la aplicación.

Esto es lo que intenté:

private void saveFile(MultipartFile multipartFile, int id) throws Exception { String destination = "/images/" + id + "/" + multipartFile.getOriginalFilename(); File file = new File(destination); multipartFile.transferTo(file); }

Resultado: FileNotFoundException - Sí, claro, ¡sí quiero crear este archivo!?!

Lo intenté usando context.getRealPath o getResources("destination") , pero sin éxito.

¿Cómo puedo crear un nuevo archivo en una carpeta específica de mi aplicación con el contenido de mi archivo multiparte?


Este código seguramente te ayudará.

String filePath = request.getServletContext().getRealPath("/"); multipartFile.transferTo(new File(filePath));


Lo siguiente funcionó para mí en ubuntu:

String filePath = request.getServletContext().getRealPath("/"); File f1 = new File(filePath+"/"+multipartFile.getOriginalFilename()); multipartFile.transferTo(f1);


Vi un ejemplo de primavera 3 usando la configuración xml (tenga en cuenta que esto no funciona en la primavera 4.2. *): http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/spring3-mvc-upload-file.html `

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="100000" /> <property name="uploadTempDir" ref="uploadDirResource" /> </bean> <bean id="uploadDirResource" class="org.springframework.core.io.FileSystemResource"> <constructor-arg> <value>C:/test111</value> </constructor-arg> </bean>


Creemos el directorio de carga en webapp y guardemos archivos en webapp / uploads :

@RestController public class GreetingController { private final static Logger log = LoggerFactory.getLogger(GreetingController.class); @Autowired private HttpServletRequest request; @RequestMapping(value = "/uploadfile", method = RequestMethod.POST) public @ResponseBody ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { String uploadsDir = "/uploads/"; String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir); if(! new File(realPathtoUploads).exists()) { new File(realPathtoUploads).mkdir(); } log.info("realPathtoUploads = {}", realPathtoUploads); String orgName = file.getOriginalFilename(); String filePath = realPathtoUploads + orgName; File dest = new File(filePath); file.transferTo(dest);

el código
String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir);

me devuelve la siguiente ruta si ejecuto la aplicación de Idea IDE
C:/Users/Iuliia/IdeaProjects/ENumbersBackend/src/main/webapp/uploads/

y el siguiente camino si hago .war y lo ejecuto bajo Tomcat:
D:/Programs_Files/apache-tomcat-8.0.27/webapps/enumbservice-0.2.0/uploads/

Mi estructura de proyecto:


String ApplicationPath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("");

Esta es la forma de obtener la ruta real de la aplicación en primavera (sin utilizar la respuesta, la sesión ...)