首頁 > 軟體

Spring boot實現上傳檔案到本地伺服器

2022-08-14 18:03:15

本文範例為大家分享了Spring boot實現上傳檔案到本地伺服器的具體程式碼,供大家參考,具體內容如下

引入設定

UploadFileConfig類

@Configuration
public class UploadFileConfig {
       @Value("${file.uploadFolder}")
        private String uploadFolder;
 
        @Bean
        MultipartConfigElement multipartConfigElement() {
            MultipartConfigFactory factory = new MultipartConfigFactory();
            factory.setLocation(uploadFolder);
            //檔案最大
            factory.setMaxFileSize("20MB");
            return factory.createMultipartConfig();
        }
}

UploadFilePathConfig類

@Configuration
public class UploadFilePathConfig extends WebMvcConfigurerAdapter {
    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
    @Value("${file.uploadFolder}")
    private String uploadFolder;
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
    }
}

在application.properties加上傳的設定項

#檔案服務本地rest請求對外地址
file.staticAccessPath=/upload/**
#檔案上傳目錄(注意Linux和Windows上目錄結構不同)需要改成你自己的實際目錄
file.uploadFolder=/Users/leichunhong/Documents/hlp/zx/
#上傳檔案本地域名 改寫成你後端服務的地址和埠
file.upload.nama=http://127.0.0.1:9090
#springBOOt上傳檔案大小
# 單個檔案的最大值
spring.servlet.multipart.max-file-size = 10MB
# 上傳檔案總的最大值
spring.servlet.multipart.max-request-size=100MB

編寫上傳controller

@RestController
@RequestMapping("/test")
public class UploadController {
 
    @Value("${file.uploadFolder}")
    private String uploadFolder;
 
    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
 
    @Value("${file.upload.nama}")
    private String reurl;
 
    @RequestMapping(value = "/upload", method = {RequestMethod.POST, RequestMethod.GET})
    public List<String> upload(HttpServletRequest request) throws MultipartException {
        String path = "";
        List<String> ksfs = new ArrayList<>();
        //1 需傳imgUrl 其他值就是傳file檔案上傳
        try {
            //將當前上下文初始化給  CommonsMutipartResolver (多部分解析器)
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                    request.getSession().getServletContext());
 
            //檢查form中是否有enctype="multipart/form-data"
            if (multipartResolver.isMultipart(request)) {
                //將request變成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                //獲取multiRequest 中所有的檔名
                Iterator<String> iter = multiRequest.getFileNames();
 
                while (iter.hasNext()) {
                    //多個檔案上傳
                    List<MultipartFile> fileList = multiRequest.getFiles(iter.next());
                    for (MultipartFile multipartFile : fileList) {
                        String realPath = uploadFolder;
                        String trueFileName = System.currentTimeMillis() + "." + FilenameUtils.getExtension(multipartFile.getOriginalFilename());
                        // 設定存放圖片檔案的路徑
                        path = realPath + trueFileName;
                        File file = new File(path);
                        multipartFile.transferTo(file);
                        path = reurl + "/upload/" + trueFileName;
                        ksfs.add(path);
                    }
                    //單個檔案
                       /* MultipartFile multipartFile=multiRequest.getFile(iter.next().toString());
                        if (multipartFile != null) {
                            excelFile = File.createTempFile(prefix, ".jpg");
                            multipartFile.transferTo(excelFile);
                            path = KSFileSave.uploadFile(prefix, excelFile, "jpg");
                            ksfs.add(path);
                       }*/
 
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
        return ksfs;
    }
 
}

呼叫介面測試,用如下的html頁面

<form method="POST" enctype="multipart/form-data" action="http:127.0.0.1:9090/test/upload">
        <table>
            <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
            <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
        </table>
</form>

點選選擇檔案上傳驗證返回結果

檢視上傳目錄

點選返回介面存取

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com