如果网站使用的是struts2框架,那么上传功能可以这样做。
网站的建设过程中免不了要上传文件,比如管理员上传图片到服务器上,然后将文件的相对路径保存在数据库。
这里为什么说是相对路径保存在数据库,因为jsp页面只能用相对路径读到图片才能成功显示。而上传图片又只能是上传到服务器上,可以理解成绝对路径。这就是下面代码中用到了relatedAddress 和address 的原因。
如果要让文件能够顺利上载,需要将对应的form的“enctype”属性设置成“multipart/form-data”并且一定需要将“METHOD”属性设置为“post”。
新建的一个UploadAction.代码如下:
package com.action;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.bean.mediaBean; import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial") public class UploadAction extends ActionSupport implements ServletRequestAware { private javax.servlet.http.HttpServletResponse response; private javax.servlet.http.HttpServletRequest request; private File upload; private String fileName; private String uploadContentType; private String block; private String board;
public String getBoard() { return board; }
public void setBoard(String board) { this.board = board; }
public String getUploadFileName() { return fileName; }
public void setUploadFileName(String fileName) { this.fileName = fileName; }
public File getUpload() { return upload; }
public void setUpload(File upload) { this.upload = upload; }
public void setUploadContentType(String contentType) { this.uploadContentType = contentType; }
public String getUploadContentType() { return this.uploadContentType; } public String getBlock() { return block; }
public void setBlock(String block) { this.block = block; } // 获得HttpServletRequest对象 public void setServletRequest(HttpServletRequest request) { this.request = request; }
public String upload() throws Exception { String board = request.getParameter("board"); String block = request.getParameter("block"); String introduce = request.getParameter("introduce"); java.io.InputStream is = new java.io.FileInputStream(upload); String address = request.getSession().getServletContext().getRealPath("/image")+ "/" +block + "/" + fileName; String relatedAddress = "image"+ "/" +block + "/" + fileName; java.io.OutputStream os = new java.io.FileOutputStream(address); byte buffer[] = new byte[99999]; int count = 0; while ((count = is.read(buffer)) > 0) { os.write(buffer, 0, count); } os.close(); is.close(); mediaBean media = new mediaBean(); media.setBlock(block); media.setBoard(board); media.setIntroduce(introduce); media.setTitle(fileName); media.setAddress(relatedAddress); media.add();
return "success"; }
public String showAllByMouth() { return null;
} } 这里要改的就是address、relatedAddress 、board、block、introduce 。
address改为你要保存的地址。
relatedAddress 相对地址,是为了把相对地址存为数据库。
这两个要保持相对一致。
String address = request.getSession().getServletContext().getRealPath("/image")+ "/" +block + "/" + fileName; String relatedAddress = "image"+ "/" +block + "/" + fileName;
board、block、introduce是我代码的需求。可以根据自己的需求取舍更改。
把路径保存到数据库的方法。这里因为我写好了一个mediaBean函数,封装了对数据库的添加的方法。所以只要如下代码就可以实现把路径保存到数据库。
mediaBean media = new mediaBean(); media.setBlock(block); media.setBoard(board); media.setIntroduce(introduce); media.setTitle(fileName); media.setAddress(relatedAddress);
