Browse Source

文件上传增加文件权限设置

zhouhao 2 years ago
parent
commit
9788fd8046

+ 25 - 0
hsweb-system/hsweb-system-file/src/main/java/org/hswebframework/web/file/FileUploadProperties.java

@@ -9,6 +9,13 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.http.MediaType;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.Collections;
 import java.util.Date;
 import java.util.Locale;
 import java.util.Set;
@@ -33,6 +40,24 @@ public class FileUploadProperties {
 
     private Set<String> denyMediaType;
 
+    private Set<PosixFilePermission> permissions;
+
+    public void applyFilePermission(File file) {
+
+        if (CollectionUtils.isEmpty(permissions)) {
+            return;
+        }
+        try {
+            Path path = Paths.get(file.toURI());
+            PosixFileAttributeView view = Files.getFileAttributeView(path, PosixFileAttributeView.class);
+            view.setPermissions(permissions);
+        } catch (Throwable ignore) {
+
+        }
+
+
+    }
+
     public boolean denied(String name, MediaType mediaType) {
         String suffix = (name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : "").toLowerCase(Locale.ROOT);
         boolean defaultDeny = false;

+ 5 - 1
hsweb-system/hsweb-system-file/src/main/java/org/hswebframework/web/file/service/LocalFileStorageService.java

@@ -24,8 +24,11 @@ public class LocalFileStorageService implements FileStorageService {
     @Override
     public Mono<String> saveFile(FilePart filePart) {
         FileUploadProperties.StaticFileInfo info = properties.createStaticSavePath(filePart.filename());
+        File file = new File(info.getSavePath());
+
         return (filePart)
-                .transferTo(new File(info.getSavePath()))
+                .transferTo(file)
+                .then(Mono.fromRunnable(()->properties.applyFilePermission(file)))
                 .thenReturn(info.getLocation());
     }
 
@@ -57,6 +60,7 @@ public class LocalFileStorageService implements FileStorageService {
                         return info.getLocation();
                     }
                 })
+                .doOnSuccess((ignore)-> properties.applyFilePermission(new File(info.getSavePath())))
                 .subscribeOn(Schedulers.boundedElastic());
     }
 }