1. 程式人生 > >springboot檔案上傳儲存到資料庫

springboot檔案上傳儲存到資料庫

package com.aol.sym.upload;

import com.aol.api.sym.domain.upload.FileUploadInfo;
import com.aol.api.sym.service.upload.IFileUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Slf4j
@RestController
@RequestMapping(value = “/api/upload”,method = RequestMethod.POST)
public class UploadController {

@Value("${honeywell.sme.attach_file_dir}")//**yml檔案的跟路徑**
private String ATTACH_FILE_DIR;

@Autowired
private IFileUploadService iFileUploadService;
@PostMapping(“/file”)
public FileUploadInfo uploadFile(@RequestParam(“file”) MultipartFile file) {
LocalDate now=LocalDate.now();
DateTimeFormatter df=DateTimeFormatter.ofPattern(“yyyyMMdd”);
String dateDir =now.format(df);
FileUploadInfo fileUploadInfo=new FileUploadInfo();

try {
    String fileCode = String.valueOf(System.nanoTime());
    // 獲取檔名
    String oriFileName = file.getOriginalFilename();
    // 獲取檔案的字尾名
    String suffix = oriFileName.substring(oriFileName.lastIndexOf("."), oriFileName.length());
   //檔案上傳的路徑
    String dirPath = ATTACH_FILE_DIR + dateDir + "/";

// 獲取檔案上傳的全路徑(防止檔名稱相同)
String fullFilePath = dirPath + fileCode+ suffix;
log.info(“上傳檔案儲存路徑:”+fullFilePath);
mkDir(new File(dirPath));

    BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(fullFilePath));
    outputStream.write(file.getBytes());
    outputStream.flush();
    outputStream.close();
    //儲存資料
    fileUploadInfo.setName(oriFileName.substring(0, oriFileName.lastIndexOf(".")));
    fileUploadInfo.setSuffix(suffix);
    fileUploadInfo.setSize(file.getSize());
    fileUploadInfo.setCode(fileCode);
    fileUploadInfo.setUrl(fullFilePath);
    iFileUploadService.saveInfo(fileUploadInfo);//呼叫saveInfo儲存到資料庫的方法
   }catch (Exception e){
       e.printStackTrace();
   }

    return fileUploadInfo;
}

@PostMapping("/doubleFile")
public  FileUploadInfo doubleFile(HttpServletRequest request){
    //用list集合接受上傳的多個檔案
    List<MultipartFile> files=((MultipartHttpServletRequest) request).getFiles("file");
    MultipartFile file = null;
    BufferedOutputStream stream = null;
    FileUploadInfo fileUploadInfo=null;
    for (int i=0;i<files.size();i++){
     file=files.get(i);
     if(!file.isEmpty()){
         LocalDate now2=LocalDate.now();
         DateTimeFormatter      dfm=DateTimeFormatter.ofPattern("yyyyMMdd");
         String dateDir =now2.format(dfm);
         fileUploadInfo=new FileUploadInfo();
         try {
             String fileCode = String.valueOf(System.nanoTime());
             // 獲取檔名
             String oriFileName = file.getOriginalFilename();
             // 獲取檔案的字尾名
             String suffix = oriFileName.substring(oriFileName.lastIndexOf("."), oriFileName.length());
             //檔案上傳的路徑
             String dirPath = ATTACH_FILE_DIR + dateDir + "/";

// 獲取檔案上傳的全路徑(防止檔名稱相同)
String fullFilePath = dirPath + fileCode+ suffix;
log.info(“上傳檔案儲存路徑:”+fullFilePath);
mkDir(new File(dirPath));

             stream = new BufferedOutputStream(new FileOutputStream(fullFilePath));
             stream.write(file.getBytes());
             stream.flush();
             stream.close();
             //儲存資料
             fileUploadInfo.setName(oriFileName.substring(0, oriFileName.lastIndexOf(".")));
             fileUploadInfo.setSuffix(suffix);
             fileUploadInfo.setSize(file.getSize());
             fileUploadInfo.setCode(fileCode);
             fileUploadInfo.setUrl(fullFilePath);
             iFileUploadService.saveInfo(fileUploadInfo);
         }catch (Exception e){
             e.printStackTrace();
         }
     }
    }
    return fileUploadInfo;
}


/**--------------------------------------      wancy          ------------------------------------------**/

/**
 * 判斷資料夾是否存在
 * @param file
 */
public static void mkDir(File file) {
    if (file.getParentFile().exists()) {
        file.mkdir();
    } else {
        mkDir(file.getParentFile());
        file.mkdir();
    }
}

}