07--struts--上传文件

 1.index.jsp

<form action="upload.do" method="post" enctype="multipart/form-data">
  	标题:<input type="text" name="title"/><br/>
  	文件:<input type="file" name="myfile"/><br/>
  	<input type="submit" value="上传">
  </form>

说明:

(1)enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data

不对字符编码。

在使用包含文件上传控件的表单时,必须使用该值。

text/plain空格转换为 "+" 加号,但不对特殊字符编码。

(2)type---file

file定义输入字段和 "浏览"按钮,供文件上传。

2.ActionForm---UploadActionForm.java

package edu.tjpu.struts;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

public class UploadActionForm extends ActionForm {

	private String title;
	//文件采用FormFile声明
	private FormFile myfile;
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public FormFile getMyfile() {
		return myfile;
	}
	public void setMyfile(FormFile myfile) {
		this.myfile = myfile;
	}
	
}

说明:

(1)文件的上传收集采用FormFile来收集,FormFile是一个接口,里面定义了用于文件的各种方法。

(2)FormFile.java源码

package org.apache.struts.upload;


import java.io.InputStream;
import java.io.IOException;
import java.io.FileNotFoundException;


/**
 * This interface represents a file that has been uploaded by a client. It is
 * the only interface or class in upload package which is typically referenced
 * directly by a Struts application.
 */
public interface FormFile
{
    /**
     * Returns the content type for this file.
     *
     * @return A String representing content type.
     */
    public String getContentType();
    
    /**
     * Sets the content type for this file.
     *
     * @param contentType The content type for the file.
     */
    public void setContentType(String contentType);
    
    /**
     * Returns the size of this file.
     *
     * @return The size of the file, in bytes.
     */
    public int getFileSize();
    
    /**
     * Sets the file size.
     *
     * @param fileSize The size of the file, in bytes,
     */
    public void setFileSize(int fileSize);    
    
    /**
     * Returns the file name of this file. This is the base name of the file,
     * as supplied by the user when the file was uploaded.
     *
     * @return The base file name.
     */
    public String getFileName();
    
    /**
     * Sets the file name of this file.
     *
     * @param fileName The base file name.
     */
    public void setFileName(String fileName);
    
    /**
     * Returns the data for the entire file as byte array. Care is needed when
     * using this method, since a large upload could easily exhaust available
     * memory. The preferred method for accessing the file data is
     * {@link #getInputStream() getInputStream}.
     *
     * @return The file data as a byte array.
     *
     * @exception FileNotFoundException if the uploaded file is not found.
     * @exception IOException           if an error occurred while reading the
     *                                  file.
     */
    public byte[] getFileData()
            throws FileNotFoundException, IOException;
    
    /**
     * Returns an input stream for this file. The caller must close the
     * stream when it is no longer needed.
     *
     * @exception FileNotFoundException if the uploaded file is not found.
     * @exception IOException           if an error occurred while reading the
     *                                  file.
     */
    public InputStream getInputStream()
            throws FileNotFoundException, IOException;
    
    /**
     * Destroys all content for the uploaded file, including any underlying
     * data files.
     */
    public void destroy();    
}

3.Action---TestUploadAction.java

package edu.tjpu.struts;

import java.io.FileOutputStream;

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 org.apache.struts.upload.FormFile;

public class TestUploadAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		UploadActionForm uaf=(UploadActionForm)form;
		String tile=(String)uaf.getTitle();
		FormFile myfile=uaf.getMyfile();
		if(myfile!=null){
			FileOutputStream fos=new FileOutputStream("d:\\"+myfile.getFileName());
			fos.write(myfile.getFileData());
			fos.flush();
			fos.close();
		}
		
		return mapping.findForward("uploadfile");
	}

	
}

说明:

(1)首先是类型转换为UploadActionForm;

(2)获取标题和文件--FormFile类型;

(3)通过getFileData()方法获取内容写入到磁盘。

4.struts-config.xml文件

<struts-config>
	<form-beans>
		<form-bean name="uploadForm" type="edu.tjpu.struts.UploadActionForm"></form-bean>
	</form-beans>
	
	<action-mappings>
		<action path="/upload"
			type="edu.tjpu.struts.TestUploadAction"
			name="uploadForm"
			scope="request"
		>
		<forward name="uploadfile" path="/upload_success.jsp"></forward>
		</action>
	</action-mappings>
</struts-config>

说明:

(1)这里的path 对应的index.jsp表达提交处理的地址;

(2)name对应于ActionForm中的名

(3)<forward>name属性值对应于Action返回的值

(4)交到upload_success.jsp去处理

 

(5)upload_success.jsp

<body>
   <h1>上传显示结果</h1>
   标题:${uploadForm.title }<br/>
   文件名:${uploadForm.myfile.fileName }<br/>
  </body>

要注意通过EL表达式输出时的格式。

 

总结:

(1)ActionForm中使用FormFile来接受上传的数据;

(2)在Action中使用FormFile接受从ActionForm中传递来的数据,并用数据流输出到磁盘;

(3)文件的上传可以通过<controller></controller>配置上传参数,比如maxFileSize、 nocache、 bufferSiz等。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值