zj
2025-02-17 76bc979b654c23be393c9c46c9e3099cdd3785ec
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package project.web.api;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
import java.util.Random;
 
import javax.servlet.http.HttpServletRequest;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
import kernel.exception.BusinessException;
import kernel.util.PropertiesLoaderUtils;
import kernel.web.ResultObject;
 
@RestController
@CrossOrigin
public class UploadImgController {
    
    private static final Logger logger = LoggerFactory.getLogger(UploadImgController.class);
    
    public final String basePath = "/public/uploadimg";
    
    private static Properties properties = PropertiesLoaderUtils.loadProperties("config/system.properties");
 
    
    @RequestMapping(value = basePath+"!execute.action")
    public Object execute(HttpServletRequest request) {
        ResultObject resultObject = new ResultObject();
 
        try {
            MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
            File file = null;
            if(resolver.isMultipart(request)) {
                MultipartHttpServletRequest multipartRequest =     (MultipartHttpServletRequest) request;
                MultipartFile multipartFile = multipartRequest.getFile("file");
                file = multipartFileToFile(multipartFile);
            }else {
                throw new BusinessException("文件上传失败");
            }
            String fileFileName = file.getName();
 
            HashMap extMap = new HashMap();
            extMap.put("image", "jpg,png");
            if (file.length() / 1024L > 30720L) {
 
                resultObject.setCode("1");
                resultObject.setMsg("图片大小不能超过30M");
                return resultObject;
            }
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String ymd = sdf.format(new Date());
 
            String fileDir = properties.getProperty("images.dir");
            File f = new File(fileDir + "/" + ymd);
            if ((!f.exists()) && (!f.mkdirs())) {
                resultObject.setCode("1");
                resultObject.setMsg("服务器错误");
                logger.warn("文件:" + fileDir + "创建失败!");
                return resultObject;
            }
 
//            String fileExt = fileFileName.substring(fileFileName.lastIndexOf(".") + 1).toLowerCase();
//            if (!Arrays.asList(((String) extMap.get("image")).split(",")).contains(fileExt)) {
////                this.error = ("上传图片是不允许的扩展名。\n只允许" + (String) extMap.get("image") + "格式。");
////                resultObject.setCode("1");
////                resultObject.setMsg(error);
////                this.result = JsonUtils.getJsonString(resultObject);
////                out.println(this.result);
////                return null;
//            }
 
            String imagePath = "";
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
            String yms = sdf2.format(new Date());
 
            String imageDir = ymd + "/" + yms + new Random().nextInt(10000000) + "." + "png";
            imagePath = fileDir + imageDir.toLowerCase().trim();
 
            FileInputStream in = new FileInputStream(file);
 
            FileOutputStream outputStream = new FileOutputStream(imagePath);
 
            BufferedInputStream inputStream = new BufferedInputStream(in);
            byte[] buf = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(buf)) != -1) {
                outputStream.write(buf, 0, length);
            }
            resultObject.setData(imageDir);
        } catch (FileNotFoundException e) {
            resultObject.setCode("1");
            resultObject.setMsg("服务器错误");
            logger.error("文件上传失败", e);
            return resultObject;
        } catch (Exception e) {
 
            resultObject.setCode("1");
            resultObject.setMsg("服务器错误");
            logger.error("文件上传失败", e);
            return resultObject;
 
        }
 
        return resultObject;
    }
    
    public static File multipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
//        String prefix = fileName.substring(fileName.lastIndexOf("."));
        String prefix = "";
        String contentType = multiFile.getContentType();
//        if(contentType.indexOf("image")!=-1) {
//            prefix = "."+contentType.replace("image/", "");
//        }else {
//            //不是图片则不处理
//            throw new BusinessException("文件上传失败");
//        }
        // 若须要防止生成的临时文件重复,能够在文件名后添加随机码
 
        try {
            File file = File.createTempFile(fileName, prefix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
}