1, 使用IDEA创建一个maven的web工程, 作为服务器只需要在webapp下创建一个images文件夹作为图片的存储目录,然后在web.xml里面配置tomcat插件, 虚拟路径设置为/, 端口号改为 8003,防止8080端口被意外占用.
2, 使用springMVC的文件上传测试效果,,但是此上传只能上传到当前服务器, 此时需要导入跨服务器上传文件的jar包工具,依赖如下:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
3,配置springMVC的文件上传解析器等就不写了,,后台上传代码如下:
@Value("${FILE_SERVER_URL}")
private String file_server_url;
@RequestMapping("/upload.do")
public Result upload(MultipartFile file) {
//接收到上传的文件,获取他的后缀名
String originalFilename = file.getOriginalFilename();
String extname = originalFilename.substring(originalFilename.lastIndexOf(".") );
String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
String url = file_server_url+uuid+extname;
//创建一个上传客户端对象
Client client = Client.create();
//连接到图片服务器
WebResource webResource = client.resource(url);
try {
//上传图片
webResource.put(file.getBytes());
// System.err.println("url = " + url);
return new Result(true, url);
} catch (Exception e) {
e.printStackTrace();
return new Result(false, "上传失败");
}
}
4, 测试一跑, 报错,文件上传失败,,查看报错信息 : "返回了一个403状态码" . 403是权限不足的意思, 得知tomcat默认跨服务器之间是 只读 状态,需要配置tomcat为 可读写状态,但是IDEA的maven插件中无法修改配置文件(可能是我不会配置吧), 只好把web.xml中的插件清除, 然后在idea中集成我电脑上的tomcat, 然后修改tomcat的conf文件夹下web.xml文件,修改如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<!--在这里加入下面这段,,将只读设置为false-->
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<!-- 上面这段-->
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
然后在idea中tomcat部署的选项中 勾选: Deploy Applications configured in Tomcat instance 这个选项, 重新启动服务器再次测试
理论上应该成功的,结果是没有报403 的错误了,,但是又报了一个409的 状态码的错误, 409代表服务器内运行有冲突,,网上查了下资料,说是路径有问题,,对比了下路径貌似没有问题啊
5, 由于我的images文件夹是 空的,我往里面添加了一个测试的html文件,然后用浏览器访问,访问成功,路径没问题呀,, 然后我又试着上传了一次, 这次居然成功了!!!! 我想到难道这和空文件夹有关,,?
6文件上传成功,按道理讲,图片服务器就搭建好了,但是此时还存在一个大问题: 此时上传的图片全是保存在部署到Tomcat的webapps下的ROOT 文件夹下的images中, 这个ROOT文件夹就是我们的图片服务器, 当在IDEA中重启tomcat时,会重新部署项目到这里,此时项目就会被覆盖,之前上传的图片将全部消失,那么之前保存下来的url地址将全部失效,怎么解决呢?
7, 接下来需要在tomcat的conf文件夹下的server.xml 文件中添加 自定义地址映射的配置 配置添加如下: 在host标签中添加:
<Context path="/images" docBase="E:\project\images" reloadable="true" />
然后重启图片服务器, 测试上传图片,此时图片顺利存储到映射的本地文件夹下了,而访问的url不变,这样即使重启tomcat也不会造成无法访问的问题了,至此,图片服务器搭建成功!