2017-01-27 10 views
0

Я пытаюсь загрузить файлы, используя весеннюю загрузку, но каждый раз, когда я перезапускаю сервер, файлы, которые я загрузил, исчезают. Весенняя загрузка создает файл с именем upload-dir и каждый раз, когда я перезапускаю сервер, этот файл удаляется и воссоздается, поэтому я не знаю, где загрузить и сохранить мои файлы.Весенняя загрузка Загрузка постоянных файлов

мой файл кода контроллер загрузки:

package com.theligue.webservice; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.core.io.Resource; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.ResponseEntity; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.*; 
import org.springframework.web.multipart.MultipartFile; 
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; 
import org.springframework.web.servlet.mvc.support.RedirectAttributes; 

import com.theligue.webservice.storage.StorageFileNotFoundException; 
import com.theligue.webservice.storage.StorageService; 

import java.io.IOException; 
import java.util.stream.Collectors; 

@Controller 
public class FileUploadController { 

    private final StorageService storageService; 

    @Autowired 
    public FileUploadController(StorageService storageService) { 
     this.storageService = storageService; 
    } 

    @GetMapping("/uploadPOC") 
    public String listUploadedFiles(Model model) throws IOException { 
     model.addAttribute("files", storageService 
       .loadAll() 
       .map(path -> 
         MvcUriComponentsBuilder 
           .fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString()) 
           .build().toString()) 
       .collect(Collectors.toList())); 
     return "uploadForm"; 
    } 





    @GetMapping("/files/{filename:.+}") 
    @ResponseBody 
    public ResponseEntity<Resource> serveFile(@PathVariable String filename) { 
     Resource file = storageService.loadAsResource(filename); 
     return ResponseEntity 
       .ok() 
       .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"") 
       .body(file); 
    } 

    @PostMapping("/") 
    public String handleFileUpload(@RequestParam("file") MultipartFile file, 
            RedirectAttributes redirectAttributes) { 
     storageService.store(file); 
     redirectAttributes.addFlashAttribute("message", 
       "You successfully uploaded " + file.getOriginalFilename() + "!"); 

     return "redirect:/uploadPOC/"; 
    } 

    @ExceptionHandler(StorageFileNotFoundException.class) 
    public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) { 
     return ResponseEntity.notFound().build(); 
    } 

} 

ответ

2

Я думаю, вы используете пример весенней загрузки? Поэтому вам просто нужно удалить в приложении Application.init() вызов storageService.deleteAll(), который удаляет все загруженные файлы при запуске.

+0

Спасибо, что сработали, знаете ли вы, как загружать файлы в каталог, отличный от того, что в этом примере? – mohammad

1

Предполагая, что вы MYSQL базы данных для загрузки файлов, я хотел бы вам попробовать следующий метод. Под вашей папкой WEB-INF должен быть файл с пружинным сервлетом. В этом файле вы бы определили свойства hibernate. Это должно быть похоже на следующий код.

<property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
      </props> 
     </property> 

когда вы держите вашу собственность, как «создать», то каждый раз, когда вы начинаете свой сервер он обязан восстановить таблицу и загрузить файл снова и снова. Чтобы сохранить новые файлы в базе данных, сохраняя при этом старые неповрежденные, выполните следующие действия.

Заменить

<prop key="hibernate.hbm2ddl.auto">create</prop> 

с

<prop key="hibernate.hbm2ddl.auto">update</prop> 

Вот и все. Теперь вместо воссоздания таблицы в вашей базе данных будут обновлены файлы.

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

  • Нет связанных вопросов^_^