Java 用MVC上传文件
我正在使用SpringMVC 我的网站上有一个表单,这个表单应该从网站用户那里获取文件,然后将其存储在中央数据库中。此表单类似于以下内容:Java 用MVC上传文件,java,file,spring-mvc,file-upload,Java,File,Spring Mvc,File Upload,我正在使用SpringMVC 我的网站上有一个表单,这个表单应该从网站用户那里获取文件,然后将其存储在中央数据库中。此表单类似于以下内容: <form action="getFile"> <input type = "file" name="file"> </form> public String saveFile(MultipartFile file) throws FileNotFoundException { try {
<form action="getFile">
<input type = "file" name="file">
</form>
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;
}
你应该用这样的词
@PostMapping(value = "/valueOfFileWithForm")
public static String getFile(@RequestPart(value = "file") MultipartFile file)
然后将“file”参数传递给如下方法:
<form action="getFile">
<input type = "file" name="file">
</form>
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;
}
publicstringsavefile(MultipartFile文件)抛出FileNotFoundException{
试一试{
列表名称和格式=getNameAndFormat(
Objects.requirennull(文件.getOriginalFilename())。
替换(“,“-”);
String name=nameAndFormat.get(0);
String format=nameAndFormat.get(1);
if(file.isEmpty()){
抛出新的FileNotFoundException(file.getName());
}
if(!Arrays.asList(allowedFormats).contains(nameAndFormat.get(1).toLowerCase())){
抛出新IOException();
}
String directoryName=makeDirectory(
常量.ROOT\u用户目录+常量.ROOT\u存储+常量.IMAGE\u目录)
.getAbsolutePath();
时间戳=新的SimpleDataFormat(“yyyy-MM-dd HH:MM:ss”)。格式(新日期();
String updatedTimeStamp=timeStamp.replaceAll(“,”-”);
updatedTimeStamp=updatedTimeStamp.replaceAll(“:”,“-”);
fileName=directoryName+“/”+updatedTimeStamp+“”+“pic”+“+格式;
File convertedFile=newjava.io.File(文件名);
if(convertedFile.exists()){
convertedFile.mkdirs();
}
file.transferTo(转换文件);
byte[]bytes=file.getBytes();
Path Path=Path.get(文件名);
写入(路径,字节);
}捕获(IOE异常){
logger.error(例如getMessage());
}
返回文件名;
}
这部分代码“Constants.ROOT\u USER\u DIRECTORY+Constants.ROOT\u STORAGE+Constants.IMAGE\u DIRECTORY”指定要上载文件的目录请记住使用MultipartFile上载文件很重要…这很有效,但对我的案例做了一些小的修改。谢谢:)