先在struts-config.xml里面聲明一個DynaActionForm,在做一個關(guān)聯(lián)的Action
<form-bean name="uploadForm" type="org.apache.struts.action.DynaActionForm" dynamic="true">
<form-property name="filename" type="java.lang.String"/>
<form-property name="uploadfile" type="org.apache.struts.upload.FormFile"/>
</form-bean>
<action
attribute="uploadForm"
input="/form/upload.jsp"
name="uploadForm"
path="/upload"
scope="request"
type="com.gcoresoft.struts.action.UploadAction"
/>
Action代碼如下

/**//*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.gcoresoft.struts.action;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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 org.apache.struts.action.DynaActionForm;
import org.apache.struts.upload.FormFile;



/** *//**
* MyEclipse Struts
* Creation date: 05-12-2007
*
* XDoclet definition:
* @struts.action path="/upload" name="Form" attribute="uploadForm" input="/form/upload.jsp" scope="request" validate="true"
*/

public class UploadAction extends Action
{
private static final Log log = LogFactory.getLog(UploadAction.class);

/**//*
* Generated Methods
*/


/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)
{
DynaActionForm uploadForm = (DynaActionForm) form;// TODO Auto-generated method stub
String filename=((String)uploadForm.get("filename")).trim();
FormFile file=(FormFile)uploadForm.get("uploadfile");
if(filename.equals("")||filename==null)

{
filename=file.getFileName();

try
{
filename=new String(filename.getBytes("GBK"),"UTF-8");//編碼轉(zhuǎn)換

} catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

log.debug("Filename:"+filename);
String filepath="e:\\temp\\";
log.debug("Realpath:"+filepath);

try
{
InputStream in=file.getInputStream();
OutputStream out=new FileOutputStream(filepath+filename);
byte[] buffer=new byte[20000];
int n=0;
while((n=in.read(buffer))!=-1)

{
out.write(buffer, 0, n);
}
out.close();
in.close();
log.debug("Upload Successfully");
return mapping.findForward("success");

} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();

} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return mapping.findForward("failure");
}
}
相關(guān)的jsp文件

<%
@ page language="java" 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"%>
<html>
<head>
<title>JSP for DynaActionForm form</title>
</head>
<body>
<html:form action="/upload" enctype = "multipart/form-data">
filename : <html:text property="filename"/><html:errors property="filename"/><br/>
uploadfile : <html:file property="uploadfile"/><html:errors property="uploadfile"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>


這樣基本就可以了。
還有就是在web.xml文件里面聲明了一個Set Character Encoding沒效果,不知道怎么回事,呆會晚上問下人看看是什么問題。
這幾天查了很多資料都無法解決那個問題,很多都提示需要修改源代碼,沒辦法,先拿這個湊合下吧。
在網(wǎng)上還找到一個方法就是將struts升級到1.2,formfile在1.2中解決了中文亂碼這個問題,所以我直接升級到了1.2問題解決。
老bean那里也有一個方法,就是使用
Jakarta 文件上傳類,詳細(xì)資料請參考:
http://www.tkk7.com/beansoft/archive/2007/01/05/92087.html
---------------------------------------------------------
專注移動開發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2007-05-12 17:20
TiGERTiAN 閱讀(1469)
評論(2) 編輯 收藏 所屬分類:
Java