圖片上傳怎麼用File接受文件

xl_echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這纔是真正的堪稱強大!!vue

圖片上功能有不少的實現,博主這裏使用的是vue+iview+springboot實現的。區別於其餘圖片上傳不一樣的是,這裏是開發的時候實際碰到的問題,好比File類型的使用。閱讀建議--直接閱讀底部最終實現能夠快速開發java

實際問題的產生

在咱們普通圖片上傳的過程當中,咱們通常都是使用MultipartFile來進行接收。可是因爲業務需求,在咱們的部分業務中必需要拿到File類型的文件,否則就無法進行開發。圖片上傳接受File就成爲了此次需求的重點,可是試了不少次,試下你都很複雜。因而便有了一下方案,直接用MultipartFile來接受,可是須要File類型的時候,使用MultipartFile來轉換。linux

MultipartFile轉File核心代碼

File file = new File("F:" + "/" + originalFilename);
multipart.transferTo(file);複製代碼

這裏利用的原理很假單,就是從流中讀取數據覆蓋到file文件中。注意:tranferTo不能讀取兩次,流中的數據讀完以後,流就自動關閉了。須要讀取兩次,第二次直接在file中去便可。spring

碰到的坑:本地和服務器路徑不同。

簡單來講就是系統不一的問題,開發的時候,大多數都用的是windows和mac的系統,這種狀況下通常開發可能先考慮本地測試,實現功能爲主。可是若是要上到服務器上面,路徑的區別問題,致使本地能實現的轉換,到服務器就會報錯。因此咱們須要作系統的識別windows

系統識別代碼以下:

String osName = System.getProperty("os.name", "");
if (osName.startsWith("Windows")) {
    System.out.println("當前操做系統爲" + osName + "系統--------------------------");
} else if (osName.startsWith("Mac OS")) {
    System.out.println("當前操做系統爲" + osName + "系統--------------------------");
} else {
    System.out.println("當前操做系統爲" + osName + "系統--------------------------");
}複製代碼

碰到的坑: 當若是是linux的時候,可能沒法建立文件,沒有權限,因此要開通權限。最終實現以下:

public File multipartToFile(MultipartFile multipart) throws IOException {
    String osName = System.getProperty("os.name", "");
    String originalFilename = multipart.getOriginalFilename();
    if (osName.startsWith("Windows")) {
        System.out.println("當前操做系統爲" + osName + "系統--------------------------");
        File file = new File("F:" + "/" + originalFilename);
        multipart.transferTo(file);
        return file;
    } else if (osName.startsWith("Mac OS")) {
        System.out.println("當前操做系統爲" + osName + "系統--------------------------");
        File file = new File("/Users/pavankumar/Desktop/" + originalFilename);
        multipart.transferTo(file);
        return file;
    } else {
        System.out.println("當前操做系統爲" + osName + "系統--------------------------");
        File file=new File("/usr/local/java/" + originalFilename);
        file.setWritable(true, false);
        multipart.transferTo(file);
        return file;
    }
}複製代碼

歡迎添加微信交流學習

圖片1

相關文章
相關標籤/搜索