在一个网页中添加了一个上传图片的功能,但是上传之后图片是不显示的,在eclipse上刷新一下项目,图片才会显示。如果不刷新的话,我们直接看项目下我们指定的上传图片存入的文件夹里面也是没有图片的。很明显就是一个刷新的问题,搜了半天解决方法大概就是把图片不存到项目下的文件夹里,可以在项目外面单独建一个存图片的文件夹,经过半天的操作这样的确可以实现不刷新项目,就可以看到图片。
但是很多博客写的并不详细,而且大多数都是通过改变tomcat的conf文件夹下的server.xml实现的,具体就是在里面的host添加一个虚拟路径,大概就是这样
<!--
图片的虚拟路径设置
docBase:图片的真实路径
path:在网页中的虚拟路径
-->
<Context docBase="E:\project\book\upload" path="/upload" reloadable="true"/>
但是我的tomcat每次启动都会把这个xml文件重置,可能是版本问题吧。
这个时候我们可以在eclipse里直接更改tomcat的配置,虚拟地址的‘/’一定要加上。
这些操作其实也是改变了server.xml文件,不过这样不会在启动的时候重置。
然后启动tomcat在浏览器中输入:
http://localhost:8080/upload/07f436209aeb400eaa2867b366b614d7.jpg
upload:你设置的虚拟地址
这个时候应该是可以看到图片的。
但是在写jsp文件和上传的时候还是有几个容易出错的地方。
一、上传文件
String fwPath = "/upload/";
这个地方以上要前面后面都加上‘/’。当将图片存在项目中的文件夹下时,只需后面的‘/’即可,
但是在项目外面的时候必须有前面的‘/’,否则图片路径会多一个项目名,造成无法访问图片。
package com.wpt.utils;
import java.io.File;
import java.io.IOException;
import org.springframework.web.multipart.MultipartFile;
public class UploadUtils {
public static String upload(MultipartFile file) {
// 访问位置
String fwPath = "/upload/";
String filename = null;
try {
// 定义上传的位置
String path = "E:\\project\\book\\upload\\";
File filePath = new File(path);
if (!filePath.exists()) {
filePath.mkdir();
}
// 获取上传文件的真实名称
filename = file.getOriginalFilename();
// 获取上传文件的后缀名
filename = filename.substring(filename.lastIndexOf('.'));
// 上传文件新的名称
filename = UUIDUtils.getUUID() + filename;
path = path + filename;
file.transferTo(new File(path));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fwPath + filename;
}
}
二、jsp文件
在网页中查看源码应该看到如下地址
前面必须有 ’/‘ ,此时点击
如果没有‘/’,点击
可以看到,如果没有‘/’,图片路径会自动添加一个项目名,此时是找不到图片的。