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
package com.ruoyi.basic.dto;
 
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.ruoyi.basic.pojo.StorageBlob;
import lombok.Data;
 
import java.util.Map;
 
@Data
public class StorageBlobDTO extends StorageBlob {
    /**
     * 预览地址
     */
    private String previewURL;
 
    /**
     * 下载地址
     */
    private String downloadURL;
 
    /**
     * 文件类型
     */
    private String application;
 
    /**
     * 支持从数字ID或完整JSON对象反序列化
     */
    @JsonCreator
    public static StorageBlobDTO from(Object value) {
        if (value instanceof Number) {
            StorageBlobDTO dto = new StorageBlobDTO();
            dto.setId(((Number) value).longValue());
            return dto;
        }
        if (value instanceof Map) {
            @SuppressWarnings("unchecked")
            Map<String, Object> map = (Map<String, Object>) value;
            StorageBlobDTO dto = new StorageBlobDTO();
            if (map.get("id") instanceof Number) {
                dto.setId(((Number) map.get("id")).longValue());
            }
            if (map.get("resourceKey") instanceof String) {
                dto.setResourceKey((String) map.get("resourceKey"));
            }
            if (map.get("contentType") instanceof String) {
                dto.setContentType((String) map.get("contentType"));
            }
            if (map.get("originalFilename") instanceof String) {
                dto.setOriginalFilename((String) map.get("originalFilename"));
            }
            if (map.get("uidFilename") instanceof String) {
                dto.setUidFilename((String) map.get("uidFilename"));
            }
            if (map.get("byteSize") instanceof Number) {
                dto.setByteSize(((Number) map.get("byteSize")).longValue());
            }
            if (map.get("path") instanceof String) {
                dto.setPath((String) map.get("path"));
            }
            if (map.get("previewURL") instanceof String) {
                dto.setPreviewURL((String) map.get("previewURL"));
            }
            if (map.get("downloadURL") instanceof String) {
                dto.setDownloadURL((String) map.get("downloadURL"));
            }
            return dto;
        }
        if (value instanceof String) {
            try {
                StorageBlobDTO dto = new StorageBlobDTO();
                dto.setId(Long.parseLong((String) value));
                return dto;
            } catch (NumberFormatException ignored) {
            }
        }
        throw new IllegalArgumentException("无法反序列化 StorageBlobDTO: " + value);
    }
}