java - 文件未保存到目录中

标签 java spring file

我想使用此代码将文件上传到 Spring 后端。

private static String UPLOADED_FOLDER = "/opt";

    @PostMapping(value = "/upload", produces = { MediaType.APPLICATION_JSON_VALUE })
    public ResponseEntity<StringResponseDTO> uploadData(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) throws Exception {

        if (file == null) {
            throw new RuntimeException("You must select the a file for uploading");
        }

        InputStream inputStream = file.getInputStream();
        String originalName = file.getOriginalFilename();
        String name = file.getName();
        String contentType = file.getContentType();
        long size = file.getSize();

        LOG.info("inputStream: " + inputStream);
        LOG.info("originalName: " + originalName);
        LOG.info("name: " + name);
        LOG.info("contentType: " + contentType);
        LOG.info("size: " + size);

        try {

            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
            Files.write(path, bytes);

            redirectAttributes.addFlashAttribute("message",
                    "You successfully uploaded '" + file.getOriginalFilename() + "'");

        } catch (IOException e) {
            e.printStackTrace();
        }

        return ResponseEntity.ok(new StringResponseDTO(originalName));
    }

由于某种原因,该文件未保存到/opt 目录中。您能给我一些关于代码不起作用的建议吗?

进入我得到的日志文件:

2019-08-11 20:40:36,297 INFO  [stdout] (default task-17) 20:40:36.297 [default task-17] INFO  o.d.a.b.restapi.MerchantController - inputStream: java.io.BufferedInputStream@661c793f
2019-08-11 20:40:36,298 INFO  [stdout] (default task-17) 20:40:36.298 [default task-17] INFO  o.d.a.b.restapi.MerchantController - originalName: Screenshot 2019-07-14 at 14.33.41.png
2019-08-11 20:40:36,299 INFO  [stdout] (default task-17) 20:40:36.298 [default task-17] INFO  o.d.a.b.restapi.MerchantController - name: file
2019-08-11 20:40:36,299 INFO  [stdout] (default task-17) 20:40:36.299 [default task-17] INFO  o.d.a.b.restapi.MerchantController - contentType: image/png
2019-08-11 20:40:36,300 INFO  [stdout] (default task-17) 20:40:36.300 [default task-17] INFO  o.d.a.b.restapi.MerchantController - size: 20936

最佳答案

尝试执行以下操作,而不是使用 Paths#get:

File newFile = new File(UPLOADED_FOLDER, file.getOriginalFileName());
LOG.info("New file location: " + newFile.getAbsolutePath()); //Log the path
Files.write(newFile.toPath(), bytes);

与其对一堆String使用+运算符来创建新文件的路径,最好使用java .io.File 构造函数。然后使用 toPath 方法来获取它。

关于java - 文件未保存到目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453483/

相关文章:

java - 计算结果错误

java - 如何在另一个 Activity 中输入两个 Activity 链接?

java - 在java中使用double时如何删除整数中的 ".0"?

java - 当 RequestBody 参数的某些属性为 null 时,如何返回 400 HTTP 错误代码?

java - Spring Bean 内的 ScheduledExecutorService 在执行几次后不起作用

java - 从 .txt 文件中读取 double

java - 如何在 JPA (Hibernate) 中映射 Class<?>

spring - 在 jhipster 中为用户实体添加属性

c++ - 从文件中读取数字 C++

java - 将文件写入 sdcard