我正在尝试制作一个web应用程序,您可以上传保存在我的文件系统中的图像,然后在某个地址(有点像imgur)提供给用户。
在图像上传并保存到我的系统中后,我一直很难为其提供服务。有人向我指出,问题可能是当我应该将图像存储在我的项目目标文件夹中时,我将其存储为源树的一部分。现在,我首先将图像存储在project/src/main/resources/static/images中的原因是我无法从其他任何地方在我的网站上提供静态内容。
我已经搜索和阅读了几天了,但我还没有找到任何适用的解决方案。这类问题的答案通常涉及到我的项目没有的文件(如application-servlet.xml或web.xml),以及我以前从未使用过的文件(通常我对Spring、Spring Boot和Java web开发非常陌生)。
我的项目的基础是由github上的导师制作的,然后我克隆了它,包括Application.java所以我看到的使用Spring配置的解决方案也不适合。
以下是我的项目的(希望相关)部分:
这是我的申请。java文件。我什么都没做,它与我克隆的原始github中的文件完全相同。
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_html" target="_blank">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>
我自己做的项目的其余部分,从我的UploadController开始。它只是从发布请求中获取文件、标签和类型,将当前文件以随机生成的名称写入文件系统中的某个位置,并将有关文件的信息(类型、标签、名称及其在文件系统中的位置)存储在数据库中:
package project.controller;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Random;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import project.service.MediaFile;
import project.service.MediaFileRepository;
@Controller
public class UploadController {
private final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Random rnd = new Random();
private int randomLength = 8;
@Autowired
private MediaFileRepository repository;
@RequestMapping(value = "/uploadmedia", method = RequestMethod.GET)
public String uploadForm() {
return "upload";
}
@RequestMapping(value = "/uploadmedia", method = RequestMethod.POST)
public String uploadSubmit(@RequestParam(value="files[]") MultipartFile[] files,
@RequestParam("tags[]") String[] tags, @RequestParam("types[]") String[] types)
{
String[] tagsArray;
MultipartFile file;
String name;
String tag;
String path;
String type;
for (int i = 0; i < files.length; i++) {
file = files[i];
tagsArray = tags[i].split("\\s+");
type = types[i];
name = randomString(randomLength);
List<MediaFile> nameExists = repository.findByName(name);
while (nameExists.size() > 0) {
name = randomString(randomLength);
nameExists = repository.findByName(name);
}
path = "/Users/.../src/main/resources/static/img/" + name + type;
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(new File(path)));
stream.write(bytes);
stream.close();
for (int j = 0; j < tagsArray.length; j++) {
tag = tagsArray[j].toLowerCase();
repository.save(new MediaFile(name, tag, path, type));
}
System.out.println("Success!");
} catch (Exception e) {
System.out.println("Failure... " + e.getMessage());
}
} else {
System.out.println("file is empty");
}
}
return "upload";
}
private String randomString( int len ){
StringBuilder sb = new StringBuilder( len );
for( int i = 0; i < len; i++ )
sb.append( AB.charAt( rnd.nextInt(AB.length()) ) );
return sb.toString();
}
}
...接下来,这是我的MediaController(上传的文件是某种媒体)。它只检查url在数据库中是否有具有相应名称的文件,如果有,则将文件路径发送到媒体。jsp。
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";
}
}
...最后,这是我的媒体。jsp文件。它只是从我的MediaController中获取文件位置,并将其作为img元素的src属性(我用来测试它的文件是图像文件)。
<!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>
您可以创建一个配置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放在Application
所在的同一个包中,或者放在它下面的某个地方,以便自动扫描它
我在中有一个java桌面应用程序。我使用提供的clean and build命令为项目创建了一个可执行jar文件。通过使用该命令,可以在netBeansProjects//dist/.jar下创建可执行jar文件。我可以在项目路径中使用java-jar.jar从命令行执行这个jar文件。但问题是,当我将这个jar移到netbeans projects文件夹之外(比如说移到桌面并运行jar文件)时,
问题内容: 我必须在根文件系统下的三个主要目录中工作-home /用户名,项目和草稿。我希望我的shell提示显示我在这些顶级目录中的哪个。 这是我正在尝试做的事情: 然后,我将PS1导出为: 不幸的是,这不能按我的意愿工作。我得到了我的提示,当我在我的主目录,但如果我切换到划痕或项目则提示也不会改变。我对bash脚本的理解不是很好,因此,我希望能帮助您纠正我的代码。 问题答案: 每次更改工作目录
本文向大家介绍使用Android系统提供的DownloadManager来下载文件,包括了使用Android系统提供的DownloadManager来下载文件的使用技巧和注意事项,需要的朋友参考一下 在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便。 例如我们可以拿来下载app的新版本apk,同时在同时注册一个广播接收器来接收下载完成时D
问题内容: 我们曾经有一种从类路径上的文件加载属性的方法: 而且效果很好。但是现在我们要从不在类路径中的系统上的特定文件加载属性。我们希望能够动态加载文件,因此我们使用Java环境变量来填充它。我将在下面给出一个简单的示例: 在Java中: 在Spring XML中: 感谢Luciano的一个想法,我也尝试过这种方法: 我尝试过的一切都失败了。无论我将my.prop.file设置为什么。最热门的歌
我是新春尝试简单的webapp。 使用springboot 2.1.0application.properties如下文件。我在src/main/webapp/WEB-INF/jsp中有jsp文件 我的控制器是。 当我将jsp文件放在/main/resources/META-INF/resources/WEB-INF/jsp中时,它可以正常工作,否则会出现以下错误 pom还具有tomcat嵌入ja
我目前正在Windows服务器上试验Docker容器。我已经创建了许多容器,我想看看它们在主机文件系统中的实际保存位置(如Hyper-V的.vhd文件)。我是否可以查看默认位置,或者使用Docker CLI查找该位置的方法?