首页 > 解决方案 > 使用 MVC 上传文件

问题描述

我正在使用弹簧 MVC !!!

我的网站上有一个表格,该表格应该从网站用户那里获取文件,然后将其存储在中央数据库中。这个表格看起来像这样:

<form action="getFile"> 
   <input type = "file" name="file">
</form>

所以在上面的表单中,用户应该拖动或放置文件。在下面的控制器中,我试图获取一个文件,最好是如果我能以某种方式在 java 中创建该文件类型 File。

@RequestMapping(value = "/valueOfFileWithForm")
public static String getFile(HttpServletRequest req){
  /// and here should happen something like this, as we do with strings or ints...
  File file = req.getParameter("file");
}

标签: javafilespring-mvcfile-upload

解决方案


你应该使用类似的东西,

    @PostMapping(value = "/valueOfFileWithForm")
  public static String getFile(@RequestPart(value = "file") MultipartFile file)

然后将“file”参数传递给这样的方法:

public String saveFile(MultipartFile file) throws FileNotFoundException {

        try {
            List<String> nameAndFormat = getNameAndFormat(
                    Objects.requireNonNull(file.getOriginalFilename()).
                            replace(" ", "-"));
            String name = nameAndFormat.get(0);

            String format = nameAndFormat.get(1);

            if (file.isEmpty()) {
                throw new FileNotFoundException(file.getName());
            }

            if (!Arrays.asList(allowedFormats).contains(nameAndFormat.get(1).toLowerCase())) {
                throw new IOException();
            }

            String directoryName = makeDirectory(
                    Constants.ROOT_USER_DIRECTORY + Constants.ROOT_STORAGE + Constants.IMAGE_DIRECTORY)
                    .getAbsolutePath();

            timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            String updatedTimeStamp = timeStamp.replaceAll(" ", "-");
            updatedTimeStamp = updatedTimeStamp.replaceAll(":", "-");

            fileName = directoryName + "/" + updatedTimeStamp + "_" + "pic" + "." + format;

            File convertedFile = new java.io.File(fileName);

            if (convertedFile.exists()) {
                convertedFile.mkdirs();
            }

            file.transferTo(convertedFile);
            byte[] bytes = file.getBytes();
            Path path = Paths.get(fileName);
            Files.write(path, bytes);

        } catch (IOException e) {
            logger.error(e.getMessage());

        }

        return fileName;

    }

这部分代码“Constants.ROOT_USER_DIRECTORY + Constants.ROOT_STORAGE + Constants.IMAGE_DIRECTORY)”指定你上传文件的目录


推荐阅读