Spring Boot上传文件路径

4

我尝试使用Spring Boot上传一些文件。 有一个问题,我应该指向哪个路径来存储我的文件。 您可以在下面看到我的UploadController、模板和Application类。

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
                                                 @RequestParam("file") MultipartFile file){
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }

}

这是我的表单。
<div class="container">
            <form method="POST" enctype="multipart/form-data"
                  action="/upload">
                File to upload:
                <input type="file" name="file"/><br/> Name:
                <input
                    type="text" name="name"/><br/> <br/> <input type="submit"
                                                               value="Upload"/> Press here to upload the file!
            </form>
        </div>

这是一个应用程序类。

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultiPartConfigFactory factory = new MultiPartConfigFactory();
        factory.setMaxFileSize("128KB");
        factory.setMaxRequestSize("128KB");
        return factory.createMultipartConfig();
    }

}
3个回答

1
这行代码包含了文件添加的位置。
new File(name + "-uploaded")

由于您没有指定完整路径,文件将保存在启动应用程序的Java类路径中。

对于生产系统,您应该将其指定在某个共享存储位置,在那里文件会定期备份,并且存储容量适合您上传的文件类型。

如果您正在使用Windows,则可以参考以下示例:

new File("d:/yourApplicationName/" + name + "-uploaded")

如果您正在使用Linux,这里有一个例子:
new File("/home/yourApplicationName/" + name + "-uploaded")

注意:首先您应该创建目录“yourApplicationName”,否则将会出现异常。


1
我认为这个问题没有一个“正确”的答案。将文件放在您喜欢的任何位置,或者如果适合您,不放置文件。这完全取决于实际业务目的。

很清楚,我的意思是我应该在哪里写这些文件的路径。 - user3127896
抱歉,我没听懂。你发布的代码哪一部分不起作用或让你不满意? - Dave Syer

0
确定你需要为多部分请求注册解析器。此外,你还需要添加 Apache Common Uploads 的依赖项,以使此示例工作。问题与 Sping Boot 的 RC4 变更有关。
应该是这样的。
@Configuration
public class Application{
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        return new CommonsMultipartResolver();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接