Java 使用SpringBoot和SpringMVC从文件系统中的任何位置提供文件
我正在尝试制作一个web应用程序,你可以上传一个保存在我的文件系统中的图像,然后在某个地址(有点像imgur)提供给用户 在上传并保存到我的系统中之后,我一直在为这些图像提供服务方面遇到问题。有人向我指出,问题可能是当我应该将图像存储在我的项目目标文件夹中时,我将图像存储为源代码树的一部分。现在,我之所以将图像存储在project/src/main/resources/static/images中,首先是因为我无法从其他任何地方在我的网站上提供静态内容 我已经搜索和阅读了这几天了,我还没有找到任何适用的解决方案。这类问题的答案通常涉及到我的项目中没有的文件(比如application-servlet.xml或web.xml),以及我以前从未使用过的文件(我对Spring、Spring Boot和JavaWeb开发都是非常陌生的) 我的项目是由github上的一位导师创建的,然后我克隆了它,包括Application.java,因此我看到的使用Spring配置的解决方案也不适合 以下是我的项目的(希望相关)部分: 这是我的Application.java文件。我没有对它做任何处理,它与我克隆的原始github中的文件完全相同Java 使用SpringBoot和SpringMVC从文件系统中的任何位置提供文件,java,spring,jsp,spring-mvc,spring-boot,Java,Spring,Jsp,Spring Mvc,Spring Boot,我正在尝试制作一个web应用程序,你可以上传一个保存在我的文件系统中的图像,然后在某个地址(有点像imgur)提供给用户 在上传并保存到我的系统中之后,我一直在为这些图像提供服务方面遇到问题。有人向我指出,问题可能是当我应该将图像存储在我的项目目标文件夹中时,我将图像存储为源代码树的一部分。现在,我之所以将图像存储在project/src/main/resources/static/images中,首先是因为我无法从其他任何地方在我的网站上提供静态内容 我已经搜索和阅读了这几天了,我还没有找到任
package project;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
/**
* The main class of the project.
* By running the main class of {@link Application} then you start the Spring Boot system
*/
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder){
return applicationBuilder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
这是我的application.properties。在这里,我刚刚添加了数据库内容:
spring.view.prefix=/WEB-INF/jsp/
spring.view.suffix=.jsp
multipart.maxFileSize=-1
debug=true
spring.datasource.url=jdbc:postgresql://localhost:5432/finaltest
spring.datasource.username=myusername
spring.datasource.password=mypassword
这是我的pom.xml(我的项目中唯一的xml文件)。在这里,我刚刚添加了数据库依赖项:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HBV501G</groupId>
<artifactId>Spring_Web_MVC</artifactId>
<version>0.1</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1200-jdbc41</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.0.0
HBV501G
您可以创建一个@配置
bean,如
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("file:///D:/your_image_location/");
}
}
请确保将bean放在
应用程序所在的同一个包中,或者放在它下面的某个地方,以便自动扫描它可能的副本正是我要找的!
package project.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import project.service.MediaFile;
import project.service.MediaFileRepository;
import java.util.List;
/**
* Created by johannesthorkell on 13.10.2015.
*/
@Controller
@RequestMapping("/media")
public class MediaController {
@Autowired
private MediaFileRepository repository;
@RequestMapping("/{media}")
public String newMedia(@PathVariable String media, Model model) {
List<MediaFile> nameExists = repository.findByName(media);
if (nameExists.size() > 0) {
MediaFile mediaFile = nameExists.get(0);
String name = mediaFile.getName();
String type = mediaFile.getType();
model.addAttribute("image", "/img/" + name + type);
return "media";
}
return "error";
}
}
<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<h1>Media Upload</h1>
<img src="${image}">
<div id="links">
<a href="/uploadmedia">upload media</a>
<a href="/searchmedia">search media</a>
</div>
</body>
</html>
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("file:///D:/your_image_location/");
}
}