action2上传不到视频

action2上传不到视频,第1张

action2上传不到视频

你可以设置struts2上传文件的最大值。。struts2默认上传文件的最大值是。。

今天使用struts2的文件上传控件时,在struts.xml中,将处理上传的action中的fileupload拦截器的maximumsize参数设置为5000000,上传了一个3m的文件后发现控制台报错,而且提示说文件超过2m。struts.xml相关配置如下:

/fileuploadresult.jsp /fileupload.jsp 500000 application/vnd.ms-powerpoint

后来尝试在struts.xml中加入

发现一切正常了,不报错了。功能也正常了。

发现struts.multipart.maxsize和fileupload拦截器的maximumsize属性分工不同,总结如下:

1.struts.multipart.maxsize掌控整个项目所上传文件的最大的size。超过了这个size,后台报错,程序处理不了如此大的文件。fielderror里面会有如下的提示:

the request was rejected because its size (16272982) exceeds the configured maximum (9000000)

2.fileupload拦截器的maximumsize属性必须小于struts.multipart.maxsize的值。

struts.multipart.maxsize默认2m,当maximumsize大于2m时,必须设置struts.multipart.ma

包括action 和 http-request两种方式

上传成功回调方法 绑定 handleSuccess 方法

自定义上传相比action上传,扩展性更强,当项目里上传需求较多,且连接不同接口地址时,配置uploadheaders 配置很多显然不太优雅。

注意:自定义上传时,需要对该上传设置一下请求头 。 在拦截器里设置请求头

自定义上传的触发方式 ,点击确定时在 importUser 里执行,执行这句即是执行uploadFile方法

注意: formdata打印不出来,实际有值

/**

上传文件

*/

public class FileAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

try {

FileForm fileform = (FileForm) form

//取得请求的文件集合

Hashtable hash = fileform.getMultipartRequestHandler().getFileElements()

//得到hashtable的枚举值

Enumeration enu = hash.elements()

//如果该枚举值包含有其它的文件

while(enu.hasMoreElements()) {

//得到文件

FormFile file = (FormFile) enu.nextElement()

System.out.println(file)

add(file)

}

return mapping.findForward("yes")

} catch (Exception e) {

e.printStackTrace()

}

return super.execute(mapping, form, request, response)

}

public void add(FormFile file){

try {

//取得写文件的目录

String url=servlet.getServletContext().getRealPath("upload")

File f1=new File(url)

if(!f1.exists()){//如果文件目录不存在

f1.mkdirs()//创建目录

}

String fileName=file.getFileName()

//创建一个文件输入流

InputStream is=file.getInputStream()

OutputStream out=new FileOutputStream(url+"/"+fileName)

int byteRead=0

byte[] by=new byte[8192]

while((byteRead=is.read(by, 0, 8192))!=-1){

out.write(by, 0, byteRead)

}

out.close()

is.close()

file.destroy()

} catch (Exception e) {

e.printStackTrace()

}

}

}

/**

下载文件

*/

页面一开始进去action,action负责把file文件夹下的所有文件读入一个ArrayList中

Action代码如下:

ArrayList list = new ArrayList()

String path=request.getRealPath("/")+"file"

String FullPath

//System.out.println(path)

myDir=new File(path)

list.clear()

contents=myDir.listFiles()

for(int i=0i<contents.lengthi++){

FullPath=contents.getName()

list.add(FullPath)

//System.out.println(FullPath)

}

request.setAttribute("list",list)

ActionForward forward=new ActionForward("/download.jsp")

return forward

然后进入download.jsp中,这个页面主要负责把所有文件显示,并提供下载连接,代码如下:

<%@ page language="java" contentType="text/htmlcharset=GBK" import="java.util.ArrayList"%>

<head>

</style>

</head>

<body>

<%ArrayList list=(ArrayList)request.getAttribute("list")

for(int i=0i<list.size()i++)

{

String a=java.net.URLEncoder.encode((String)list.get(i))

out.print("<a href=./loaded.do?name="+a+">"+list.get(i)+"</a><br>")

}

%>

</body>

</html>

注意,下划线画中的代码的作用,就是解决问题的所在。

接下来可以直接传入到loadedaction中,也可以通过一个form,我演示的是通过一个form

Form代码如下

package org.aeolus.struts.form

import javax.servlet.http.HttpServletRequest

import org.apache.struts.action.ActionErrors

import org.apache.struts.action.ActionForm

import org.apache.struts.action.ActionMapping

public class LoadForm extends ActionForm {

/*

*Generated Methods

*/

private String name

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

}

接下来就是action的代码

LoadForm doc=(LoadForm)form

String docName = new String(doc.getName().getBytes("8859_1"))

File f

if(docName!=""){

String docFullPath=request.getRealPath("/")

f = new File(docFullPath+"file\\"+docName)

response.reset()

response.setContentType("application/x-msdownloadcharset=GBK")

System.out.print(response.getContentType())

response.setCharacterEncoding("UTF-8")

docName=java.net.URLEncoder.encode(docName,"UTF-8")

response.setHeader("Content-Disposition", "attachmentfilename=" +new String(docName.getBytes("UTF-8"),"GBK"))

BufferedInputStream br = new BufferedInputStream(new FileInputStream(f))

byte[] buf = new byte[1024]

int len = 0

OutputStream out = response.getOutputStream()

while((len = br.read(buf)) >0)

out.write(buf,0,len)

out.close()

response.wait()

ActionForward forward=new ActionForward("/download.jsp")

return forward }

return null

注意,下划线画中的代码的作用,就是解决问题的所在。说明一下:

response.setCharacterEncoding("UTF-8")

docName=java.net.URLEncoder.encode(docName,"UTF-8")

response.setHeader("Content-Disposition", "attachmentfilename=" +new String(docName.getBytes("UTF-8"),"GBK"))

如果不这样做你将要下载的文件名是乱码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11458337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存