使用ssh框架 struts上传图片,使用相对路径 保存到本地服务器文件夹下面,路径保存到mysql数据库中
一,项目文件部署
在webRoot下面创建了upload文件夹 主要是用来存取图片
二,添加图片的页面
<body>
<!-- enctype="multipart/form-data"图片上传是以二进制的形式上传 -->
<s:form action="AddFile" method="post" enctype="multipart/form-data">
<s:textfield name="detailed" label="图片详细"></s:textfield>
<s:file name="file" label="图片"></s:file>
<s:submit label="上传"/>
</s:form>
</body>
三,struts.xml的配置文件
<struts>
<!-- 上传的全部图片的最大限制-->
<constant name="struts.multipart.maxSize" value="1024102400"/>
<package name="default" extends="struts-default" >
<action name="AddFile" class="addImg">
<!-- 重定向,当在添加的action中返回name="scce" 的时候,就重定向带allFile的action,显示全部的图片 -->
<result name="scce" type="redirectAction">allFile</result>
<!-- 限制图片的格式和图片的大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg
</param>
<param name="maximumSize">102400</param>
</interceptor-ref>
<!-- 默认的拦截器,必须要写 -->
<interceptor-ref name="defaultStack" />
</action>
<!-- 查询全部的action -->
<action name="allFile" class="All">
<result name="all">/scce.jsp</result>
</action>
</package>
</struts>
四,添加图片的action类代码如下
@SuppressWarnings("serial")
public class Add_action extends ActionSupport {
private ImgServlet imgServlet;
//图片详细
private String detailed;
// 封装上传文件域的属性
private File file;
// 封装上传文件类型的属性
private String fileFileName;
// 封装上传文件名的属性
private String fileContentType;
public ImgServlet getImgServlet() {
return imgServlet;
}
public void setImgServlet(ImgServlet imgServlet) {
this.imgServlet = imgServlet;
}
public String getDetailed() {
return Detailed;
}
public void setName(String Detailed) {
this.name = Detailed;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = System.currentTimeMillis()+fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@SuppressWarnings("unchecked")
public String execute(){
File destFile = null;
//获得图片保存的路径
String root = ServletActionContext.getServletContext().getRealPath("/upload");
try {
InputStream is = new FileInputStream(file);
destFile = new File(root,this.getFileFileName());
FileUtils.copyFile(file, destFile);
//把图片写入到上面设置的路径里
OutputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[400];
int length = 0 ;
while((length = is.read(buffer))>0){
os.write(buffer, 0, length);
}
FileImg fileImg=new FileImg(name,this.getFileFileName());
//把图片添加到数据库
imgServlet.AddImg(fileImg);
is.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "scce";
}
}
五 查询全部图片的action
public class All_action {
private ImgServlet imgServlet;
public ImgServlet getImgServlet() {
return imgServlet;
}
public void setImgServlet(ImgServlet imgServlet) {
this.imgServlet = imgServlet;
}
@SuppressWarnings("unchecked")
public String execute(){
//获得request对象
Map<String, Object> request = (Map<String, Object>) ActionContext.getContext().get("request");
//将数据库中的值保存到list集合中
List<FileImg> fileImgslist=imgServlet.All();
//把list集合保存到request中
request.put("fileImgslist", fileImgslist);
return "all";
}
}
六,显示图片的jsp页面
<body>
<c:forEach items="${fileImgslist}" var="aa">
<img alt="" src="upload/${aa.url}">
</c:forEach>
</body>