java 上傳,刪除檔案
阿新 • • 發佈:2019-01-23
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.web.multipart.MultipartFile;
public class HandleFile {
/**
* 儲存檔案到本地,並返回檔案的url相對路徑
*
* @param file
* 檔案
* @param basePath
* 專案根目錄
* @return 檔案的url相對路徑
* @throws IOException
*/
public static String saveFile(MultipartFile file, String basePath) throws IOException {
/*第2步:建立資料夾*/
/*1.1 根據今天的日期建立資料夾相對路徑 upload/2017-05-12 */
Date now = new Date();// 獲取當前時間
Long longNow = now.getTime();
DateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd");
String strToday = dFormat.format(longNow);
String relFolderPath = "upload" + File.separator + strToday; // 資料夾相對路徑
/*1.2 資料夾全路徑:專案路徑/upload/2017-05-12 */
String fullFolderPath = basePath + File.separator + relFolderPath; // 資料夾全路徑
/*1.3 根據資料夾全路徑判斷,如果資料夾不存在,建立資料夾*/
File outFolder = new File(fullFolderPath);
if (!outFolder.exists()) {
outFolder.mkdirs();
}
/*第2步:建立檔案*/
/*2.1 根據資料夾全路徑,檔名,當前日期的時間戳 建立檔案全路徑*/
String fileName = file.getOriginalFilename(); //獲取檔名(含字尾)
String fullFilePath = fullFolderPath + File.separator + longNow + fileName; // 檔案全路徑
String fullUrlPath = "upload/" + strToday + "/" + longNow + fileName;// 要存入資料的相對路徑
/*第2.2步:根據檔案全路徑,建立檔案*/
File outFile = new File(fullFilePath);
if (!outFile.exists()) {// 如果檔案不存在,建立檔案
outFile.createNewFile();
}
/*第3步:根據空檔案,建立字元流的目的地(輸出流)*/
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(outFile)); // 建立檔案輸出流
/*第4步:根據上傳的檔案,建立緩衝區,生成字元流,存入緩衝區*/
byte[] buffer = file.getBytes();// 建立檔案流
/*第5步:把緩衝區的字元流 寫入 字元流目的地(把輸入流寫入輸出流)*/
stream.write(buffer);
/* 第6步:重新整理流,關閉流 */
stream.close();
return fullUrlPath;
}
/**
* 根據檔案絕對路徑,刪除一個圖片,刪除記錄
*
* @param fullFilePath
*/
public static void deleteFile(String fullFilePath) {
File deleteFile = new File(fullFilePath);
deleteFile.delete();
}
}
儲存檔案的時候,也可以做如下修改
/*第4步之後可以修改如下,把緩衝區改用輸入流*/
/*第4步:獲取輸入流*/
InputStream iStream = file.getInputStream();
BufferedInputStream biStream = new BufferedInputStream(iStream);
/*第5步:把輸入流寫入輸出流*/
int f;
while ((f = biStream .read()) != -1) {
outStream .write(f);
}
/*第6步:重新整理流,關閉流*/
outStream .flush();
outStream .close();
biStream .close();
iStream.close();