package io.loli.box.service.impl; import io.loli.box.entity.ImgFile; import io.loli.box.service.AbstractStorageService; import org.joda.time.LocalDateTime; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.time.Instant; import java.util.Calendar; @Component @ConditionalOnProperty(name = "storage.type", havingValue = "filesystem") @ConfigurationProperties(prefix = "storage.filesystem") public class FileSystemStorageService extends AbstractStorageService { private String imgFolder; @Override public String upload(InputStream is, String filename, String contentType, long length) throws IOException { String savePath = imgFolder; String saveDate = getCurrentSaveDate(); Path targetPath = new File(savePath + File.separator + saveDate, filename).toPath(); Files.copy(is, targetPath); return saveDate.replace("\\","/") + "/" + filename; } /** * Get folder for today and will create it if not exist * * @return generated date folder */ public String getCurrentSaveDate() { Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); // I don't known why calendar start with 0 int month = cal.get(Calendar.MONTH) + 1; int day = cal.get(Calendar.DAY_OF_MONTH); String monthStr = String.valueOf(month); if (month < 10) { monthStr = "0" + monthStr; } String dayStr = String.valueOf(day); if (day < 10) { dayStr = "0" + dayStr; } String path = year + File.separator + monthStr + File.separator + dayStr; String savePath = this.imgFolder; if (savePath.endsWith(File.separator)) { } else { savePath += File.separator; } savePath += path; File file = new File(savePath); if (!file.exists()) { file.mkdirs(); } return path; } public void deleteFile(String name) { ImgFile file = imgFileRepository.findByShortName(name); super.deleteFile(name); Instant dateInstant = file.getCreateDate().toInstant(); LocalDateTime dateTime = LocalDateTime.fromDateFields(file.getCreateDate()); int year = dateTime.getYear(); int month = dateTime.getMonthOfYear(); int day = dateTime.getDayOfMonth(); String monthStr = String.format("00", month); String dayStr = String.format("00", day); String path = this.imgFolder + File.separator + year+ File.separator + monthStr + File.separator + dayStr + File.separator + name; File f = new File(path); if (f.exists()) { f.delete(); } } public String getImgFolder() { return imgFolder; } public void setImgFolder(String imgFolder) { this.imgFolder = imgFolder; } }