tj
2025-06-05 2d549a04870d1315868a7cf19952b64e8071e711
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.cloudroam.extension.file;
 
import com.cloudroam.module.file.AbstractUploader;
import com.cloudroam.module.file.FileProperties;
import com.cloudroam.module.file.FileTypeEnum;
import com.cloudroam.module.file.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
 
import javax.annotation.PostConstruct;
import java.io.BufferedOutputStream;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * 文件上传服务默认实现,上传到本地
 *
 * @author 
 */
@Slf4j
public class LocalUploader extends AbstractUploader {
 
    @Autowired
    private FileProperties fileProperties;
 
 
    @PostConstruct
    public void initStoreDir() {
        // 本地存储需先初始化存储文件夹
        FileUtil.initStoreDir(this.fileProperties.getStoreDir());
    }
 
    @Override
    protected boolean handleOneFile(byte[] bytes, String newFilename) {
        String absolutePath =
                FileUtil.getFileAbsolutePath(fileProperties.getStoreDir(), getStorePath(newFilename));
        try (BufferedOutputStream stream =
                     new BufferedOutputStream(Files.newOutputStream(new File(absolutePath).toPath()))) {
            stream.write(bytes);
        } catch (Exception e) {
            log.error("write file to local err:", e);
            return false;
        }
        return true;
    }
 
    @Override
    protected FileProperties getFileProperties() {
        return fileProperties;
    }
 
    @SuppressWarnings("ResultOfMethodCallIgnored")
    @Override
    protected String getStorePath(String newFilename) {
        Date now = new Date();
        String format = new SimpleDateFormat("yyyy/MM/dd").format(now);
        Path path = Paths.get(fileProperties.getStoreDir(), format).toAbsolutePath();
        java.io.File file = new File(path.toString());
        if (!file.exists()) {
            file.mkdirs();
        }
        return Paths.get(format, newFilename).toString();
    }
 
    @Override
    protected String getFileType() {
        return FileTypeEnum.LOCAL.getValue();
    }
}