这里有新鲜出炉的Java设计模式,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了Javaweb Struts文件上传功能实现过程,思路清晰,供大家参考,感兴趣的小伙伴们可以参考一下
一.Struts文件上传的思路
之前也讲过了FileUpload这个组件,功能很强大,但是操作繁琐复杂。这次,在Strust中也对文件上传有所支持,并FileUpload进行了包装,用起来方便了许多。
这里涉及到了一个标签和一个类:
<html:file 16>
用这个标签可以上传文件,但是要接收次内容必须依靠org.apache.struts.upload.FormFile
接口完成。
二.实现
sh.jsp:
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
- <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"
- %>
- <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"
- %>
- <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>
- sh.jsp
- </title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head>
- <body>
- <html:form action="/jsp/upload.do" method="post" enctype="multipart/form-data">
- <html:file property="photo">
- </html:file>
- <html:submit value="上传">
- </html:submit>
- </html:form>
- </body>
- </html>
UploadForm.java:
- package com.zyy.struts.form;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.upload.FormFile;
- public class UploadForm extends ActionForm {
- private FormFile photo;
- public FormFile getPhoto() {
- return photo;
- }
- public void setPhoto(FormFile photo) {
- this.photo = photo;
- }
- }
IPTimeStamp.java:
- package com.zyy.util;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Random;
- public class IPTimeStamp {
- private SimpleDateFormat sdf = null;
- private String ip = null;
- public IPTimeStamp() {}
- public IPTimeStamp(String ip) {
- this.ip = ip;
- }
- public String getIPTimeRand() {
- StringBuffer buf = new StringBuffer();
- if (this.ip != null) {
- String s[] = this.ip.split("\\.");
- for (int i = 0; i < s.length; i++) {
- buf.append(this.addZero(s[i], 3));
- }
- }
- buf.append(this.getTimeStamp());
- Random r = new Random();
- for (int i = 0; i < 3; i++) {
- buf.append(r.nextInt(10));
- }
- return buf.toString();
- }
- public String getDate() {
- this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
- return this.sdf.format(new Date());
- }
- public String getTimeStamp() {
- this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- return this.sdf.format(new Date());
- }
- private String addZero(String str, int len) {
- StringBuffer s = new StringBuffer();
- s.append(str);
- while (s.length() < len) {
- s.insert(0, "0");
- }
- return s.toString();
- }
- public static void main(String args[]) {
- System.out.println(new IPTimeStamp("192.168.1.1").getIPTimeRand());
- }
- }
UploadAction.java:
- package com.zyy.struts.action;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.Action;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import com.zyy.struts.form.UploadForm;
- import com.zyy.util.IPTimeStamp;
- public class UploadAction extends Action {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- UploadForm uploadForm = (UploadForm) form;
- IPTimeStamp ips = new IPTimeStamp(request.getRemoteAddr());
- // 文件名
- String fileName = ips.getIPTimeRand()
- + "."
- + uploadForm.getPhoto().getFileName().split("\\.")[uploadForm
- .getPhoto().getFileName().split("\\.").length - 1];
- // 输出路径
- File outFile = new File(super.getServlet().getServletContext()
- .getRealPath("/")
- + "upload" + File.separator + fileName);
- // 存放图片的文件夹
- File file = new File(super.getServlet().getServletContext()
- .getRealPath("/")
- + "upload");
- if (!file.exists()) {
- file.mkdir();
- }
- InputStream input = uploadForm.getPhoto().getInputStream();
- OutputStream output = new FileOutputStream(outFile);
- byte data[] = new byte[1024];
- int temp = 0;
- while ((temp = input.read(data, 0, 1024)) != -1) {
- output.write(data);
- }
- output.close();
- input.close();
- return null;
- }
- }
struts-config.xml:
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
- <struts-config>
- <form-beans>
- <form-bean name="uploadForm" type="com.zyy.struts.form.UploadForm"></form-bean>
- </form-beans>
- <global-exceptions>
- </global-exceptions>
- <global-forwards>
- </global-forwards>
- <action-mappings>
- <action path="/jsp/upload" attribute="uploadForm" input="/jsp/sh.jsp"
- name="uploadForm" scope="request" type="com.zyy.struts.action.UploadAction">
- </action>
- </action-mappings>
- <message-resources parameter="resource.MessageResources" />
- </struts-config>
由于我保存在的是super.getServlet().getServletContext().getRealPath("/")+ "upload"
这是虚拟目录的真实路径的upload文件夹下。
由此可见,在Struts中的文件上传原理和FileUpload一样,但是Struts进行了包装,所以用起来明显比单独用FileUpload组件方便了许多。
来源: http://www.phperz.com/article/17/1123/360509.html