Browse Source

文件下载

dzx 6 months ago
parent
commit
7c2266f903

+ 26 - 0
src/main/java/com/xjrsoft/module/organization/dto/DownloadFileDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.organization.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @title: AddUserDto
+ * @Author tzx
+ * @Date: 2022/4/4 17:11
+ * @Version 1.0
+ */
+@Data
+public class DownloadFileDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty("文件路径")
+    private String fileUrl;
+
+    @ApiModelProperty("文件名字")
+    private String fileName;
+
+}

+ 25 - 12
src/main/java/com/xjrsoft/module/system/controller/FileController.java

@@ -6,7 +6,6 @@ import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -20,6 +19,7 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.UploadUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.OSSConfig;
+import com.xjrsoft.module.organization.dto.DownloadFileDto;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.oss.factory.OssFactory;
 import com.xjrsoft.module.system.dto.FileDownloadDto;
@@ -46,6 +46,10 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
@@ -247,18 +251,27 @@ public class FileController {
 
     @GetMapping("/downloadFile")
     @ApiOperation(value = "按照上传文件名下载文件")
-    public ResponseEntity<byte[]> downloadFile(@RequestParam Long folderId){
-        byte[] resultBtyeAry_temp = fileService.downloadFileByZip(folderId);
-        File file = fileService.getOne(
-                new QueryWrapper<File>().lambda()
-                        .eq(File::getFolderId, folderId)
-        );
-        String encodedFileName = "";
-        try{
-            encodedFileName = URLEncoder.encode(file.getFileName(), "UTF-8");
-        }catch (Exception e){
+    public ResponseEntity<byte[]> downloadFile(@Valid DownloadFileDto dto){
+        try {
+            URL url = new URL(dto.getFileUrl());
+            URLConnection conn = url.openConnection();
+            InputStream in = conn.getInputStream();
+            
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = in.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+            byte[] byteArray = outputStream.toByteArray();
+            in.close();
+            outputStream.close();
 
+            String[] split = dto.getFileUrl().split("\\.");
+            String fileSuffiex = split[split.length - 1];
+            return RT.fileStream(byteArray, dto.getFileName() + "." + fileSuffiex);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
-        return RT.fileStream(resultBtyeAry_temp, encodedFileName + file.getFileType());
     }
 }