首页 > 其他分享 >struts2文件上传

struts2文件上传

时间:2023-08-27 11:02:16浏览次数:30  
标签:username 文件 java String struts2 file import 上传 public


上传文件其实分为两个步骤:首先,将客户端传递过来的文件保存到struts.multipart.saveDir键所指定的目录下,如果没有指定,那么就保存到javax.servlet.context.tempdir环境变量所指定的目录下,然后,Action中所定义的成员变量file,实际指向的是临时目录中的临时文件,在服务器通过IO的方式,将临时文件写入到指定的服务器的目录中。


在写表单时,也应该有一些注意:

1)传递方式必须为post;

2)还要有一个属性,即enctype=“multipart/form-data”

示例:

FileUploadAction.java:

package com.suo.actions;

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;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {

	private String username;
	
	private File file;
	
	private String fileFileName;//上传的文件的名字,这个命名有一定的形式,即文件名+FileName.
	
	private String fileContentType;//上传的文件的媒体类型,这个命名有一定的形式,即文件名+ContentType.
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	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;
	}

	public String execute() throws Exception
	{
		/**
		 * 上传文件的关键就是如何从客户端发送的请求中,获取到文件。
		 * 在普通的Servlet中,比较麻烦,而在Struts2中,进行了类型转换,
		 * 直接就可以从客户端获得文件,在Action中就可以使用。
		 */
		
		String root=ServletActionContext.getRequest().getRealPath("/upload");
		
		//建立输出流,向磁盘传递文件
		OutputStream os=new FileOutputStream(new File(root,fileFileName));
		
		//建立输入流,接收从客户端传过来得文件,这里直接进行过类型转换,直接就可以用
		InputStream is=new FileInputStream(file);
		
		System.out.println(file.getName());
		System.out.println(file.getAbsolutePath());
		
		byte[] buffer=new byte[512];
		
		int length=0;
		
		while((length=is.read(buffer))!=-1)
		{
			os.write(buffer, 0, length);
		}
		
		is.close();
		os.close();
		
		return SUCCESS;
	}
}
表单:

<form action="/struts2/test1/fileupload" method="post" enctype="multipart/form-data">
    	username:<input type="text" name="username"><br>
    	file:<input type="file" name="file"><br>
    	<input type="submit" value="submit">
</form>
struts.xml:

<action name="fileupload" class="com.suo.actions.FileUploadAction">
	<result name="success">/result/FileUploadResult.jsp</result>
</action>


若是上传的多个文件,则Action应该这样写:

package com.suo.actions;

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

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction2 extends ActionSupport {

	private String username;
	private List<File> file;
	private List<String> fileFileName;
	private List<String> fileContentType;
	
	
	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public List<File> getFile() {
		return file;
	}


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


	public List<String> getFileFileName() {
		return fileFileName;
	}


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


	public List<String> getFileContentType() {
		return fileContentType;
	}


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


	@Override
	public String execute() throws Exception {
		
		String root=ServletActionContext.getRequest().getRealPath("/upload");
		
		for(int i=0;i<file.size();i++)
		{
			OutputStream os=new FileOutputStream(new File(root,fileFileName.get(i)));
			InputStream is=new FileInputStream(file.get(i));
			byte[] buffer=new byte[512];
			
			int length=0;
			
			while((length=is.read(buffer))!= -1)
			{
				os.write(buffer, 0, length);
			}
			
			os.close();
			is.close();
		}
		return SUCCESS;
	}
	
}



指定上传文件的临时存储目录和设定上传文件的大小的方法如下:

临时目录和上传文件大小这些参数都是在一个default.properties文件中设定的,这个文件我们不能直接修改,但是我们可以通过新建一个名为struts.properties的文件,来覆盖其中的某些值,如临时目录和上传文件大小。如下在struts.properties改变临时目录和上传文件的大小:

struts.multipart.saveDir=F\:/TempUpload
struts.multipart.maxSize=104857600




标签:username,文件,java,String,struts2,file,import,上传,public
From: https://blog.51cto.com/u_5173797/7251468

相关文章

  • struts2异常处理
    Struts2中的异常处理有两种形式:一种是局部异常处理,一种是全局异常处理在struts.xml中的package下有两个这样的标签:<global-exception-mappings>和<global-results>,前者指定异常处理的类,后者是异常处理结果,通常指定一个显示异常信息的页面。而在action中,也有类似全局的异常处理,<exce......
  • Linux文件加密指南
    在工作和生活中为了安全考虑,通常会对一些重要文件进行加密备份或加密保存。在Linux中如何做到呢?本文将为你介绍在Linux中常见的加密文件的方法。01利用vim/vi加密优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了;缺点:很明显让别人知道加密了,容易让别人把加密的文件破......
  • C#邮件带附件发送成功后附件文件不能及时删除,报错该进程无法访问路径“”,因为它正在被
    背景在做邮件发送因为附件file控件是动态产出的,在后台只能以httpfilecollection方式循环获取,因为IE和FireFox兼容问题,IE下File.FileName获取的是文件的全路径而在FireFox下就只能获取到文件名,导致Attachmentattchment=newAttachment(File.FileName);火狐下会出错,因为File.......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • promethus二进制文件安装脚本
    #!/bin/bashuseradd-M-r-s/bin/falseprometheusmkdir/etc/prometheus/var/lib/prometheustarxfprometheus-*.tar.gz&&cdprometheus-*cp./{prometheus,promtool}/usr/local/bin/cp-r./{consoles,console_libraries}/etc/prometheus/cp./promet......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • Unity 写入本地文本文件
    voidStart(){WriteLocalFile("E:\\Test.txt","唯一能赢我的人叫做,我从来没听说过,另一个叫做,我想想,哎,节目效果");}///<summary>///写入本地文件txt,json等文件///</summary>///<paramname="path">路径</param>///<paramname=......
  • 搜索文件的相关命令(Ubuntu)
    一:whereis命令 这个命令的搜索速度很快。因为这个命令是在一些特定的目录里查找文件,而不是全盘查找。也可以用来搜索可执行的文件、源文件和帮助手册在系统上的位置。格式:whereis[选项]文件或者目录名  下表是常用的有针对性的选项:选项说明-b显示二进制格式的文件-m显示帮助......
  • 【2.0】flask框架之配置文件
    【一】引入django有settings配置文件所有web框架都会有配置文件-配置文件的形式可能不太一样【二】flask的配置文件【1】配置方式一(简单配置)importuuidfromflaskimportFlaskapp=Flask(__name__)#配置方式一:只能配置debug和secret_keyapp.debug=True......
  • [转载]修复容器中的top指令以及/proc文件系统中的信息
    如何修复容器中的top指令以及/proc文件系统中的信息呢?通过lxcfs解决Docker和Kubernetes环境中解决遗留应用无法识别容器资源限制的问题。wgethttps://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpmyu......