2012-06-01 5 views
21

Я хочу, чтобы сохранить загруженные изображения в определенную папку в Spring 3 MVC приложения, развернутого на сервере TomcatSpring MVC сохранить загруженные MultipartFile в определенную папку

Моя проблема заключается в том, что я не может сохранить загруженные изображения файлов хрста приложение работает.

Вот что я пробовал:

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

Результат: FileNotFoundException - Да, конечно, я хочу создать этот файл!?!

Я пробовал его с помощью context.getRealPath или getResources("destination"), но безуспешно.

Как создать новый файл в определенной папке моего приложения с содержимым моего многостраничного файла?

+0

Какие ошибки вы получаете, когда вы пытались context.getRealPath или GetResources (» пункт назначения ") см. http://stackoverflow.com/questions/2970643/create-a-file-and-store-in-java-web-application-folder –

+0

Ах, спасибо, getRealPath не работает, потому что он возвращает null если приложение было развернуто в военный файл и не было извлечено! Его работа вне военного контейнера! Но есть ли какие-либо варианты, чтобы получить путь к файлу внутри войны? – Alexander

+0

Я бы так не сказал. На самом деле не имеет смысла добавлять файлы в развернутую войну. Это то, что вы хотите сделать? –

ответ

20

Этот код, несомненно, поможет вам.

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

, но без использования запроса на сервлет http, как мы можем получить путь ..? –

+0

Существует много способов: вы можете использовать запрос или сеанс, чтобы получить реальный путь. Спасибо Рави. M – Phuong

6

Давайте создадим Закачивает каталог в веб-приложение и сохранять файлы в веб-приложение/Закачивает:

@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); 

Кодекса
String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir);

возвращает мне следующий путь, если я бегу приложение от Idea IDE
C:\Users\Iuliia\IdeaProjects\ENumbersBackend\src\main\webapp\uploads\

и следующий путь, если я делаю .war и запустить его под Tomcat:
D:\Programs_Files\apache-tomcat-8.0.27\webapps\enumbservice-0.2.0\uploads\

Моя структура проекта:
enter image description here

+0

Последняя строка кода 'file.transferTo (dest);' дает мне IO исключение, и сообщение об ошибке «Система не может найти указанный путь». Любая идея, почему это происходит? –

+1

@AND, вы уверены, что путь существует в вашей файловой системе? Сначала вам необходимо создать каталоги (вручную или программно). –

1

Я видел пружинную 3 пример с использованием конфигурации XML (обратите внимание, это делает не вок на весну 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>

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

Это, как получить реальный путь к App весной (без ответа, сессии ...)

+1

вы не должны использовать 'getRealPath()' для сохранения файлов .. см. [Этот ответ] (https://stackoverflow.com/a/12160863/3891638) – cozyconemotel

Смежные вопросы