java - 使用 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");
}
解决方案
你应该使用类似的东西,
@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)”指定你上传文件的目录
推荐阅读
- javascript - 如何为图表js图例的点样式提供自定义设计(图标)?
- qt - 如何在 C++ 中创建自定义 QML 弹出窗口?
- mysql - 我如何列出任何演员
- javascript - 是否可以从 express.js 中的路由器中提取前缀?
- grails - Grails neo4j run-app 提供编译失败
- c# - ASP.NET Web API:“消息”:“请求的资源不支持 http 方法 'POST'、PUT、DELETE。” 在邮递员
- c# - 使用条件计算日期持续时间
- java - 知道以下文件使用什么数据交换格式以及如何用某种编程语言解析它
- git-svn - git svn fetch - 会话 URL 与预期的会话 URL 不匹配
- django - Rest Framework 使用 SlugRelatedField 更新时验证不正确