一、文件上传的三种方式
1、上传到tomcat服务器 ;
①自己的电脑,项目在哪里,图片就在哪里;
②云服务器:是没有CDEF盘的,只有/根目录
?2.上传到指定文件目录(用的多)
添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服务器和web服务器通常是一个,但是文件目录与Tomcat目录肯定不是同一个
3、在数据库表中建立二进制字段,将图片存储到数据库; ? ? ? 安全性比第二种高
注意事项:
1、上传文件界面:enctype="multipart/form-data" ? ?type="file"
2、struts必须按照指定的格式去接收参数变量
二、文件上传的代码(第二中)
ClzAction
package com.zking.web; ? import java.io.File; ? import org.apache.commons.io.FileUtils; ? import com.zking.dao.ClzDao; import com.zking.entity.Clz; import com.zking.util.BaseAction; import com.zking.util.PageBean; ? public class ClzAction extends BaseAction<Clz> { ?? ? ?? ?/** ?? ? * 按照指定的格式曲接受参数变量 ?? ? * 1.上传的文件 ?? ? * 2.上传的文件名 ?? ? * 3.上传的文件类型 ?? ? */ ?? ?private File img; ?? ?private String imgFileName; ?? ?private String imgContentType; ? ?? ?public File getImg() { ?? ??? ?return img; ?? ?} ? ?? ?public void setImg(File img) { ?? ??? ?this.img = img; ?? ?} ? ?? ?public String getImgFileName() { ?? ??? ?return imgFileName; ?? ?} ? ?? ?public void setImgFileName(String imgFileName) { ?? ??? ?this.imgFileName = imgFileName; ?? ?} ? ?? ?public String getImgContentType() { ?? ??? ?return imgContentType; ?? ?} ? ?? ?public void setImgContentType(String imgContentType) { ?? ??? ?this.imgContentType = imgContentType; ?? ?} ?? ?/** ?? ? * 跳转到文件上传界面 ?? ? * @return ?? ? * @throws Exception ?? ? */ ? ? public String preUpload() throws Exception { ?? ??? ?this.result=this.clzDao.list(clz, null).get(0); ?? ??? ?this.req.setAttribute("result", result); ?? ??? ?return "upload"; ?? ?} ?? ? /** ?? ??? ? * 文件上传 ?? ??? ? * @return ?? ??? ? * @throws Exception ?? ??? ? */ ? ? public String upload() throws Exception { ? ? ?? ?//img代表客户选择的文件(图片),接下来要将图片上传到其他地方 ? ? ?? ?//img代表了源头,要将其写入目的地target ? ? ?? ?String destDir="F:\temp\imgs"; ? ? ?? ?String serverDir="/uploadImages"; ? ? ?? ?FileUtils.copyFile(img, new File(destDir+"/"+imgFileName)); ? ? ?? ?//将图片加到数据库 ? ? ?? ?//数据库保存的值是:/uploadImages/xx.png ? ? ?? ?//图片是在:E:/temp/2021/mvc/upload/1.png ? ? ?? ?//访问:http://localhost:8080/struts/uploadImages/xx.png ? ? ?? ?clz.setPic(serverDir+"/"+imgFileName); ? ? ?? ?this.clzDao.edit(clz); ?? ??? ?return TOLIST; ?? ?} ? }
配置文件
<result name="upload">/upload.jsp</result>
clzList.jsp?
<%@ page language="java" contentType="text/html; charset=UTF-8" ?? ?pageEncoding="UTF-8"%> <%@ taglib uri="http://jsp.veryedu.cn" prefix="z"%>?? ? <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>?? ? <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link ?? ?href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css" ?? ?rel="stylesheet"> <script ?? ?src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script> <title>工作列表</title> <style type="text/css"> .page-item input { ?? ?padding: 0; ?? ?width: 40px; ?? ?height: 100%; ?? ?text-align: center; ?? ?margin: 0 6px; } ? .page-item input, .page-item b { ?? ?line-height: 38px; ?? ?float: left; ?? ?font-weight: 400; } ? .page-item.go-input { ?? ?margin: 0 10px; } </style> </head> <body> ?? ?<form class="form-inline" ?? ??? ?action="${pageContext.request.contextPath }/sy/clz_list.action" method="post"> ?? ??? ?<div class="form-group mb-2"> ?? ??? ??? ?<input type="text" class="form-control-plaintext" name="job_title" ?? ??? ??? ??? ?placeholder="请输入标题名称"> <!-- ?? ??? ??? ?<input name="rows" value="20" type="hidden"> --> <!-- 不想分页 --> ?? ??? ??? ??? ?<input name="pagination" value="false" type="hidden"> ?? ??? ?</div> ?? ??? ?<button type="submit" class="btn btn-primary mb-2">查询</button> ?? ??? ?<a class="btn btn-primary mb-2" href="${pageContext.request.contextPath }/sy/clz_toEdit.action">新增</a> ?? ?</form> ? ?? ?<table class="table table-striped bg-success"> ?? ??? ?<thead> ?? ??? ??? ?<tr> ?? ??? ??? ??? ?<th scope="col">ID</th> ?? ??? ??? ??? ?<th scope="col">班级名字</th> ?? ??? ??? ??? ?<th scope="col">教员</th> ?? ??? ??? ??? ?<th scope="col">图片</th> ?? ??? ??? ??? ?<th scope="col">操作</th> ?? ??? ??? ?</tr> ?? ??? ?</thead> ?? ??? ?<tbody> ?? ??? ??? ?<c:forEach ?var="b" items="${result}"> ?? ??? ??? ?<tr> ?? ??? ??? ??? ?<td>${b.cid }</td> ?? ??? ??? ??? ?<td>${b.cname }</td> ?? ??? ??? ??? ?<td>${b.cteacher }</td> ?? ??? ??? ??? ?<td> ?? ??? ??? ??? ?<img alt="" src="${b.pic }" style="width:50px;height:70px;"> ?? ??? ??? ??? ?</td> ?? ??? ??? ??? ?<td> ?? ??? ??? ??? ??? ?<a href="${pageContext.request.contextPath }/sy/clz_toEdit.action?cid=${b.cid}">修改</a> ?? ??? ??? ??? ??? ?<a href="${pageContext.request.contextPath }/sy/clz_del.action?cid=${b.cid}">删除</a> ?? ??? ??? ??? ??? ?<a href="${pageContext.request.contextPath }/sy/clz_preUpload.action?cid=${b.cid}">上传图片</a> ?? ??? ??? ??? ?</td> ?? ??? ??? ?</tr> ?? ??? ??? ?</c:forEach> ?? ??? ?</tbody> ?? ?</table> ?? ?<!-- 这一行代码就相当于前面分页需求前端的几十行了 --> ?? ?<z:page pageBean="${pageBean }"></z:page> ? </body> </html>
映射路径(server.xml)
<Context docBase="F:\temp\imgs" path="/uploadImages"/>
?
|