我想将上传的图像保存到部署在Tomcat上的Spring 3 MVC应用程序中的特定文件夹
我的问题是我无法将上传的图像文件保存到运行applciation的主机上。
以下是我的尝试:
private void saveFile(MultipartFile multipartFile, int id) throws Exception {
String destination = "/images/" + id + "/" + multipartFile.getOriginalFilename();
File file = new File(destination);
multipartFile.transferTo(file);
}
结果:FileNotFoundException - 是的,我确实要创建这个文件!?!
我使用context.getRealPath
或getResources("destination")
进行了尝试,但没有成功。
如何使用我的多部分文件的内容在我的应用的特定文件夹中创建新文件?
答案 0 :(得分:28)
此代码肯定会对您有所帮助。
String filePath = request.getServletContext().getRealPath("/");
multipartFile.transferTo(new File(filePath));
答案 1 :(得分:11)
让我们在webapp中创建上传目录并将文件保存在 webapp / uploads 中:
@RestController
public class GreetingController {
private final static Logger log = LoggerFactory.getLogger(GreetingController.class);
@Autowired
private HttpServletRequest request;
@RequestMapping(value = "/uploadfile", method = RequestMethod.POST)
public
@ResponseBody
ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
String uploadsDir = "/uploads/";
String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir);
if(! new File(realPathtoUploads).exists())
{
new File(realPathtoUploads).mkdir();
}
log.info("realPathtoUploads = {}", realPathtoUploads);
String orgName = file.getOriginalFilename();
String filePath = realPathtoUploads + orgName;
File dest = new File(filePath);
file.transferTo(dest);
代码
String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir);
会返回下一个路径
C:\Users\Iuliia\IdeaProjects\ENumbersBackend\src\main\webapp\uploads\
和下一个路径,如果我制作.war并在Tomcat下运行它:
D:\Programs_Files\apache-tomcat-8.0.27\webapps\enumbservice-0.2.0\uploads\
答案 2 :(得分:1)
我看到了一个使用xml配置的spring 3示例(请注意,这不适用于Spring 4.2。*):http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/spring3-mvc-upload-file.html `
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000" />
<property name="uploadTempDir" ref="uploadDirResource" />
</bean>
<bean id="uploadDirResource" class="org.springframework.core.io.FileSystemResource">
<constructor-arg>
<value>C:/test111</value>
</constructor-arg>
</bean>
&#13;
答案 3 :(得分:0)
String ApplicationPath =
ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("");
这是如何在Spring中获取App的真实路径(不使用响应,会话......)
答案 4 :(得分:0)
以下在ubuntu上为我工作:
String filePath = request.getServletContext().getRealPath("/");
File f1 = new File(filePath+"/"+multipartFile.getOriginalFilename());
multipartFile.transferTo(f1);
答案 5 :(得分:0)
您可以从multipartfile获取inputSream并将其复制到所需的任何目录中。
kotlin-stdlib-jdk7
这适用于Linux和Windows。