Uploading Files

来源:互联网 发布:java document类 编辑:程序博客网 时间:2024/06/04 18:53

1、项目包结构:


2、文件说明:

@Controllerpublic class FileUploadController {    private final StorageService storageService;    @Autowired    public FileUploadController(StorageService storageService) {        this.storageService = storageService;    }    @GetMapping("/")    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("/handleFileUpload")    public String handleFileUpload(@RequestParam("file") MultipartFile file,                                   RedirectAttributes redirectAttributes) {        storageService.store(file);        redirectAttributes.addFlashAttribute("message",                "You successfully uploaded " + file.getOriginalFilename() + "!");        return "redirect:/";    }    @ExceptionHandler(StorageFileNotFoundException.class)    public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) {        return ResponseEntity.notFound().build();    }}



@Servicepublic class FileSystemStorageService implements StorageService {    private final Path rootLocation;    @Autowired    public FileSystemStorageService(StorageProperties properties) {        this.rootLocation = Paths.get(properties.getLocation());    }    @Override    public void store(MultipartFile file) {        try {            if (file.isEmpty()) {                throw new StorageException("Failed to store empty file " + file.getOriginalFilename());            }            Files.copy(file.getInputStream(), this.rootLocation.resolve(file.getOriginalFilename()));        } catch (IOException e) {            throw new StorageException("Failed to store file " + file.getOriginalFilename(), e);        }    }    @Override    public Stream<Path> loadAll() {        try {            return Files.walk(this.rootLocation, 1)                    .filter(path -> !path.equals(this.rootLocation))                    .map(path -> this.rootLocation.relativize(path));        } catch (IOException e) {            throw new StorageException("Failed to read stored files", e);        }    }    @Override    public Path load(String filename) {        return rootLocation.resolve(filename);    }    @Override    public Resource loadAsResource(String filename) {        try {            Path file = load(filename);            Resource resource = new UrlResource(file.toUri());            if(resource.exists() || resource.isReadable()) {                return resource;            }            else {                throw new StorageFileNotFoundException("Could not read file: " + filename);            }        } catch (MalformedURLException e) {            throw new StorageFileNotFoundException("Could not read file: " + filename, e);        }    }    @Override    public void deleteAll() {        FileSystemUtils.deleteRecursively(rootLocation.toFile());    }    @Override    public void init() {        try {            Files.createDirectory(rootLocation);        } catch (IOException e) {            throw new StorageException("Could not initialize storage", e);        }    }}


3、响应: