这个问题在这里已经有答案了:
上传文件返回403错误-spring mvc(4个答案)
17天前关门了。
我正在使用springbootmultipartfile来允许用户上传他们的文件,我想把上传的文件保存在project目录或我的磁盘“c:\upload”上(或任何它在本地工作的地方)。当我提交任何文件,我得到403错误禁止(springbootstarter安全性用于嵌入式登录)。
以下是浏览器中打印的错误截图:403 error
在控制台中,出现以下错误:
org.thymeleaf.exceptions.templateinputexception:解析模板[error]时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问模板
这是我的项目结构:项目结构
这是我的上传控制器:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class UploadController {
//Save the uploaded file to this folder
private static String UPLOADED_FOLDER = "./src/main/resources/uploaded";
@GetMapping("/test")
public String index() {
return "upload";
}
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "redirect:uploadStatus";
}
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 "redirect:/uploadStatus";
}
@GetMapping("/uploadStatus")
public String uploadStatus() {
return "uploadStatus";
}
}
这里是upload.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>You can upload your files here</h1>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" /><br/><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
uploadstatus.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Upload Status</h1>
<div th:if="${message}">
<h2 th:text="${message}"/>
</div>
</body>
</html>
我使用thymeleaf作为模板引擎:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
我还是一个初学者,对spring boot有基本的经验,我一直在寻找解决方案,所以请任何帮助/建议,以解决问题将不胜感激。
提前谢谢!
2条答案
按热度按时间zmeyuzjn1#
问题是因为spring boot security(csrf保护),要解决这个问题,有两种可能性:
1-将这一行添加到上传表单,效果很好:
2-还可以更改安全自动配置并进行我自己的配置以禁用csrf。我使用了@configuration类,如下所示:
有关spring引导安全性的详细说明,请参阅配置spring引导安全性!
非常感谢@gustlik
7xllpg7q2#
这是由于csrf(跨站点请求伪造)保护。在表单上添加带有csrf标记的隐藏字段。