Artikel ini memperkenalkan fungsi unggahan dan unduhan springboot.
1. Buat proyek Springboot dan tambahkan dependensi
compile ("org.springframework.boot: spring-boot-starter-web") compile ("org.springframework.boot: spring-boot-starter-thymeleaf")Direktori proyek adalah:
Kelas Startup Application.java
paket halo; impor org.springframework.boot.springapplication; impor org.springframework.boot.autoconfigure.springbootApplication; impor org.springframework.boot.context.properties.enableConfigurationProperties; @SpringbootApplication Aplikasi kelas publik {public static void main (string [] args) {springApplication.run (application.class, args); }}2. Buat halaman tes
Buat unggahan baru.html di direktori sumber daya/templat
<html xmlns: th = "http://www.thymeleaf.org"> <body> <v: if = "$ {message}"> <h2 th: text = "$ {pesan}"/> </div> <div> <bentuk metode = "post" owctype = "multipart/form Unggah: </td> <td> <input type = "file" name = "file"/> </td> </tr> <tr> <td> </td> <td> <input type = "kirim" value = "unggah"/> </td </tr> </table> </formrom> </div> </{{{{{a. TH: href = "$ {file}" rel = "eksternal nofollow" th: text = "$ {file}"/> </li> </ul> </div> </body> </html>3. Buat layanan StorageService baru
Antarmuka StorageService
Paket Hello.Storage; impor org.springframework.core.io.resource; impor org.springframework.web.multipart.multipartfile; impor java.nio.file.path; impor java.util.stream.stream; Public Interface StorageService {void init (); void store (file multipartfile); Stream <path> loadAll (); Load jalur (nama file string); Sumber daya loadAsResource (nama file string); void deleteAll (); }Implementasi StorageService
Paket Hello.Storage; impor org.springframework.core.io.resource; impor org.springframework.core.io.urlResource; impor org.springframework.stereotype.service; impor org.springframework.util.filesystemutils; impor org.springframework.util.stringutils; impor org.springframework.web.multipart.multipartfile; impor java.io.ioException; impor java.net.malformedurlexception; impor java.nio.file.files; impor java.nio.file.path; impor java.nio.file.paths; impor java.nio.file.standardcopyoption; impor java.util.function.predicate; impor java.util.stream.stream; @Service Public Class FilesyStemStorageService mengimplementasikan StorageService {private final path rootLocation = paths.get ("unggah-dir"); / *** Simpan file** file @param file*/ @Override public void store (file multipartFile) {string filename = stringutils.cleanpath (file.getoriginalfileName ()); coba {if (file.isempty ()) {lempar StorageException baru ("Gagal menyimpan file kosong" + fileName); } if (FileName.Contains ("..")) {// Ini adalah pemeriksaan keamanan StorageException baru ("tidak dapat menyimpan file dengan jalur relatif di luar direktori saat ini" + fileName); } File.copy (file.getInputStream (), this.rootlocation.resolve (fileName), StandardCopyOption.Replace_existing); } catch (ioException e) {lempar StorageException baru ("Gagal menyimpan file" + nama file, e); }} /*** Sebutkan semua file di bawah unggahan -dir* @return* /@Override Public Stream <Tath> loadAll () {coba {return file.walk (this.rootlocation, 1) // path ->! Path.equals (this.rootlocation) .filter (predikat baru <path> () {@override publice (rootrocation). Path (Path> Path> () {) {@Override @ @oLOTRICATION). }); } catch (ioException e) {lempar StorageException baru ("Gagal membaca file yang disimpan", e); }} @Override public path load (string fileName) {return rootlocation.resolve (nama file); } / *** Dapatkan sumber daya file* @param nama file nama* @return sumber daya* / @Override sumber daya publik loadAsResource (string fileName) {coba {path file = load (fileName); Sumber daya sumber daya = UrlResource baru (file.touri ()); if (resource.exists () || resource.isreadable ()) {return resource; } else {throw new StorageFileNotFoundException ("Tidak dapat membaca file:" + fileName); }} catch (Malformedurlexception e) {Throw New StorageFileNotFoundException ("Tidak dapat membaca file:" + nama file, e); }} / *** Hapus semua file dalam direktori unggahan-DIR* / @Override public void deleteAll () {filesystemutils.deleterecurity (rootlocation.tofile ()); } / *** Inisialisasi* / @Override public void init () {try {file.createDirectories (rootlocation); } catch (ioException e) {lempar StorageException baru ("tidak dapat menginisialisasi penyimpanan", e); }}}StorageException.java
Paket Hello.Storage; Public Class StorageException memperluas runtimeException {public storeageException (string message) {super (pesan); } public storeageException (pesan string, penyebab yang dapat dilempar) {super (pesan, penyebab); }} StorageFileNotFoundException.javapackage hello.storage; Public Class StorageFileNotFoundException memperluas StorageException {public storeGefileNotFoundException (string message) {super (pesan); } public StorageFileNotFoundException (String Message, Throwable Penyebab) {super (pesan, penyebab); }}4. Pembuatan Pengontrol
Masukkan file yang diunggah di direktori unggahan-DIR proyek, dan daftarkan file yang dapat diunduh pada antarmuka secara default.
Fungsi ListuploadedFiles akan mencantumkan semua file di direktori saat ini
File Unduh ServeFile
File Upload Peganganfileupload
paket halo; impor java.io.ioException; impor java.util.stream.collectors; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.core.io.resource; impor org.springframework.http.httpheaders; impor org.springframework.http.responseentity; impor org.springframework.stereotype.controller; impor org.springframework.ui.model; impor org.springframework.web.bind.annotation.exceptionHandler; impor org.springframework.web.bind.annotation.getmapping; impor org.springframework.web.bind.annotation.pathvariable; impor org.springframework.web.bind.annotation.postmapping; impor org.springframework.web.bind.annotation.requestparam; impor org.springframework.web.bind.annotation.responseBody; impor org.springframework.web.multipart.multipartfile; impor org.springframework.web.servlet.mvc.method.annotation.mvcuricomponentsbuilder; impor org.springframework.web.servlet.mvc.support.redirectattributes; impor hello.storage.storageFileNotFoundException; impor hello.storage.storageService; @Controller kelas publik 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 ())); mengembalikan "UploadForm"; } @GetMapping ("/file/{filename :.+}") @ResponseBody Public Responstity <pource> serveFile (@PathVariable String fileName) {sumber daya = StorageService.LoadAsResource (fileName); return responseEntity.ok (). Header (httpheaders.content_disposition, "lampiran; nama file =/" " + file.getFileName () +" /"").body(file); } @PostMapping ("/") Public String HandleFileUpload (@RequestParam ("File") File MultipartFile, RedirectAttributes RedirectAttributes) {StorageService.store (file); redirectattributes.addflashattribute ("pesan", "Anda berhasil mengunggah" + file.getoriginalFileName () + "!"); mengembalikan "Redirect:/"; } @ExceptionHandler (StorageFileNotFoundException.class) Public Responentity <?> HandLestorageFileNotFound (StorageFileNotFoundException exc) {return responEntity.notfound (). Build (); }} Unduh Kode Sumber: https://github.com/hellokittynii/springboot/tree/master/springbootuploadanddownload
Meringkaskan
Di atas adalah kode sumber untuk mengunggah dan mengunduh file springboot yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!