java web文件上传功能实现

鉴于很多刚毕业做web的同学,可能需要做一些譬如excel,pdf之类文档上传的功能,现在我们就来复习一下struts2如何将单个文件上传至服务器。

代码写的比较简单,适合刚入手的同学。

准备工作:上传文件需要的jar包 如图

jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
        <title>演示struts2</title>  
   </head>  

  
  <body>  
       <form action="test.action" method="post" <span style="color:#ff0000;">enctype="multipart/form-data"</span>>  
           <table>  
                <tr>  
                    <td>  
                        成功!  
                    </td>  
                </tr>  
                <tr>
                <td>
                	<input type="file" name="file" size="50" />
                	<input type="submit" value="上传"/>
                </td>
                </tr>
            </table>  
        </form>  
    </body>  

</html>


java代码如下:

package Action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

public class Testfile {
	//file属性用来封装上传的文件
	private File file;
	//fileName属性用来封装上传的文件名
	private String fileFileName;
	//fileContentType属性用来封装上传文件的类型
	private String fileContentType;
	
	public String execute() throws Exception{
		InputStream in = new FileInputStream(file);
		String uploadPath =null;
		try {
			uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
		} catch (Exception e) {
			System.out.println("文件路径无法找到!");
			return "error";
		}
		//设置目标文件
		System.out.println(uploadPath);
		File toFile = new File(uploadPath,this.getFileFileName());
		OutputStream out = new FileOutputStream(toFile);
		//设置缓存
		byte[] buffer = new byte[1024];
		
		int length = 0;
		
		//读取file文件输出到toFile文件中
		while((length=in.read(buffer))>0){
			out.write(buffer, 0, length);
		}
		
		System.out.println("上传文件名"+fileFileName);
		System.out.println("上传文件类型"+fileContentType);
		
		//关闭输入流
		in.close();
		
		//关闭输出流
		out.close();
		
		return "success";
		
		
		
		
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	
	public String getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}

	public String getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}
	
}


我的struts2配置文件如下

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC   
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
<struts>  
<span style="color:#ff0000;"><constant name="struts.multipart.saveDir" value="/tmp"></constant>
</span>    <package name = "struts2" extends ="struts-default">  
        <action name = "login" class = "Action.struts2demo">  
            <result name = "error">/error.jsp</result>  
            <result name = "success">/success.jsp</result>  
        </action>  
        <action name = "test" class = "Action.Testfile">
        	<result name = "success">/success.jsp</result>
        </action>
   </package>  
</struts> 


最后在我电脑上的成功上传文件至tomcat服务器下

控制台输出如下:

需要注意的是:jsp中form表单类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。还有struts2中标红的需要配置,Struts2中的struts.multipart.saveDir主要是用来设置上传文件的临时目录,不配置文件上传时会报错。

好啦,下周我会讲讲登录页面验证码的实现,本人也是刚入职不久的菜鸟,需要学习的知识也很多,望大家多多指教。

java web交流学习群:532226495

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值