酷酷的嵩 2022-01-19 11:15 采纳率: 62.5%
浏览 155
已结题

springboot项目部署到Linux服务器 进行文件上传

项目在服务器上文件上传想放到jar包所在文件夹lib的同级文件夹dist的upload文件夹中,该如何实现

@RestController
@RequestMapping("/api/bbb")
public class TimeController {
        @PostMapping("/upload")
        public BaseResult upload(MultipartFile file){
            //获取文件名
            String fileName = file.getOriginalFilename();
            //获取文件后缀名
           /* String suffixName = fileName.substring(fileName.lastIndexOf("."));
            //重新生成文件名
            fileName = UUID.randomUUID()+suffixName;*/
            //指定本地文件夹存储
            String filePath = ".../dist/upload/";
            try {
                //将图片保存到static文件夹里
                file.transferTo(new File(filePath+fileName));
                String tarpath = "tar -xvf"+ fileName+"-.../dist/upload";
                Process process = Runtime.getRuntime().exec(tarpath);

                return new BaseResult("200","success","");
            } catch (Exception e) {
                e.printStackTrace();
                return new BaseResult("400","failed","");
            }
        }
    }

  • 写回答

1条回答 默认 最新

  • 酒一杯。 2022-01-19 11:23
    关注
    
    /**
         * 保存文件工具类
         * @param file 文件
         * @param storagePath 保存地址
         * @param fileName 文件名称
         * @return
         */
        public static  Boolean saveFile( MultipartFile file, String storagePath,  String fileName) throws Exception{
            //检查当前有没有传入的目录 如果有则不创建 ,反之创建目录
            Path path = Paths.get(storagePath);
            Boolean isCreate = null;
            if (!Files.exists(path)) {
                //创建目录
                Path directories = Files.createDirectories(path);
                isCreate = createFile(file, fileName, directories);
            } else {
                isCreate = createFile(file, fileName, path);
            }
            return isCreate;
        }
    
    private static Boolean createFile(MultipartFile file, String fileName, Path directories) {
            try {
                //获取输入流
                InputStream in = file.getInputStream();
                FileOutputStream fileOut = new FileOutputStream(new File(directories + "\\" + fileName));
                byte[] buf = new byte[1024 * 8];
                while (true) {
                    int read = 0;
                    if (in != null) {
                        read = in.read(buf);
                    }
                    if (read == -1) {
                        break;
                    }
                    fileOut.write(buf, 0, read);
                }
                fileOut.flush();
                fileOut.close();
                in.close();
            } catch (IOException e) {
                return false;
            }
            return true;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵