0 0

关于struts2的上传和下载问题20

问题1:虽然我设置了文件上传的类型(例子当中是所有图片类型),但是上传当中发现只能上传GIF和BMP这两种文件类型的图片,其他都不可以,提示的错误信息居然是我上传文件类型不匹配,在properties中已经配置了报错信息struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8\uFF0C\u8BF7\u91CD\u8BD5\uFF01
问题2:虽然上传BMP文件可以成功,但是下载却失败,myeclipse提示找不到inputstream入口
问题3:上传大于系统默认的字节文件,不报错误信息,在properties中已经配置了报错信息(发现小于系统默认的字节文件才可以报出错误信息,郁闷中。。。。),且该上传的文件不在文件上传的设置中,居然也没有报出错误信息
struts.messages.error.file.too.large=\u4E0A\u4F20\u6587\u4EF6\u8FC7\u5927\uFF0C\u8BF7\u91CD\u8BD5\uFF01
问题4:发现不能上传png,jpg,zip等文件,下面是具体代码,希望大家能帮助我解决,拜托了
上传事件的Action代码:
package test.actions;

import java.io.*;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileupAction extends ActionSupport
{
private File[] file;
private String[] fileContentType;
private String[] fileFileName;
private String savePath;

public String getSavePath()
{
return savePath;
}

public void setSavePath(String savePath)
{
this.savePath = "d:" + savePath;
}

public File[] getFile()
{
return file;
}

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

public String[] getFileContentType()
{
return fileContentType;
}

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

public String[] getFileFileName()
{
return fileFileName;
}

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

@Override
@SuppressWarnings("unchecked")
public String execute() throws Exception
{
System.out.println(savePath);
ActionContext.getContext().getSession().put("savePath", savePath);
String fileName = "[";
if (file == null)
{
this.addFieldError("file", this.getText("file.null"));
return INPUT;
}
for (int i = 0; i < file.length; i++)
{
File uploadFile = file[i];
InputStream is = new FileInputStream(uploadFile);
OutputStream os = new FileOutputStream(new File(savePath,
fileFileName[i]));
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0)
{
os.write(buffer, 0, length);
}
fileName = fileName + fileFileName[i];
is.close();
os.close();
}
fileName = fileName + "]";
ActionContext.getContext().getSession().put("uploadFileName", fileName);
return SUCCESS;
}
}
上传事件的页面代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>

<script type="text/javascript">

function addMore()
{
var td = document.getElementById("more");

var br = document.createElement("br");
var input = document.createElement("input");
var button = document.createElement("input");

input.type = "file";
input.name = "file";

button.type = "button";
button.value = "Remove";

button.onclick = function()
{
td.removeChild(br);
td.removeChild(input);
td.removeChild(button);
}

td.appendChild(br);
td.appendChild(input);
td.appendChild(button);

}

</script>

</head>

<body>

<table align="center" width="50%">
<tr>
<td>

<s:fielderror cssStyle="color:red" />

</td>
</tr>
</table>


<s:form action="fileupAction" theme="simple"
enctype="multipart/form-data" method="post">
<table align="center" width="50%" border="1">
<tr>
<td>
username
</td>
<td>
<s:textfield name="username"></s:textfield>
</td>
</tr>

<tr>
<td>
password
</td>
<td>
<s:password name="password"></s:password>
</td>
</tr>


<tr>
<td>
file
</td>

<td id="more">
<s:file name="file" disabled="false"></s:file>
<input type="button" value="Add More.." onclick="addMore()">
</td>
</tr>

<tr>
<td>
<s:submit value=" submit "></s:submit>
</td>

<td>
<s:reset value=" reset "></s:reset>
</td>
</tr>
</table>
</s:form>
</body>
</html>
下载事件的Action代码:
package test.actions;

import com.opensymphony.xwork2.ActionSupport;
import java.io.*;

import org.apache.struts2.ServletActionContext;

public class DownLoadAction extends ActionSupport
{
private String fileName;
private String downPath;

public String getDownPath()
{
return downPath;
}

public void setDownPath(String downPath)
{
this.downPath = downPath;
}

public String getFileName()
{
return fileName;
}

public void setFileName(String fileName)
{
this.fileName = fileName;
}

@Override
public String execute() throws Exception
{
return SUCCESS;
}

public InputStream getDownloadFile()
{
return ServletActionContext.getServletContext

().getResourceAsStream(
"/upload/" + fileName);
}

public String getDownloadFileName()
{
String filename = null;
try
{
filename = new String(this.fileName.getBytes(),

"ISO8859-1");

} catch (UnsupportedEncodingException e)
{
}
return filename;
}
}
下载事件的页面代码:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>


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

</head>

<body>
fileName:[
<s:property value="fileFileName" />
]
<br>
<s:iterator value="fileFileName" status="fn">
<img src="${sessionScope.savePath }/<s:property />"></img><br>
<a
href="
<s:url action='downLoadAction'>
<s:param name='fileName'>
<s:property />
</s:param>
</s:url>">
下载
</a>
<br>
</s:iterator>
</body>
</html>
XML配置文件:
<?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>
<constant name="struts.custom.i18n.resources"
value="messageResource">
</constant>
<constant name="struts.multipart.saveDir" value="D:\"></constant>
<package name="Struts2" extends="struts-default">

<!-- 文件上传事件 -->
<action name="fileupAction" class="test.actions.FileupAction">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,application/zip
</param>
<param name="maximumSize">200000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<param name="savePath">/upload</param>
<result name="success">/upload_result.jsp</result>
<result name="input">/upload.jsp</result>
</action>


<!-- 文件下载事件 -->
<action name="downLoadAction"
class="test.actions.DownLoadAction">
<result name="success" type="stream">
<param name="contentType">
image/bmp,image/png,image/gif,image/jpeg,application/zip
</param>
<!-- 下载文件处理方法 -->
<param name="contentDisposition">
<!-- attachment;filename="${fileName}" -->
attachment;filename="${downloadFileName}"
</param>
<!-- 下载文件输出流定义 -->
<param name="inputName">downloadFile</param>
</result>
</action>
</package>
</struts>
messageResource.properties文件:
struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8\uFF0C\u8BF7\u91CD\u8BD5\uFF01
struts.messages.error.file.too.large=\u4E0A\u4F20\u6587\u4EF6\u8FC7\u5927\uFF0C\u8BF7\u91CD\u8BD5\uFF01
file.null=\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A\!

问题补充:如果路径不对的话,为什么我上传GIF成功后,能成功下载GIF图片格式的图片呢?
2010年4月12日 20:14

8个答案 按时间排序 按投票排序

0 0

小秋豆正解。

2010年4月26日 21:45
0 0

fgffff

2010年4月16日 10:50
0 0

我自己都写了个都可以的。如需要我可以给你

2010年4月15日 03:19
0 0

你好朋友,上传不成功明显是类型不批评,你可以拦截器不设置类型限制上传你所需要的文件的格式打印调用 getFileFileName()来查看struts对文件的定义。因为我以前试过jpeg现在名字叫image/pjpeg

2010年4月15日 03:18
0 0

我给你一个代码,经过测试使用的,完全没有问题,不过这个是我曾今在网上找到的,呵呵,不过我测试过了,放心好,我们做的项目中都是这样写的


文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。
common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。
用该组件可实现一次上传一个或多个文件,并可限制文件大小。


下载后解压zip包,将commons-fileupload-1.0.jar复制到tomcat的webapps你的webappWEB-INFlib下,目录不存在请自建目录。
新建一个servlet: Upload.java用于文件上传:

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;

public class Upload extends HttpServlet {

private String uploadPath = "C:upload"; // 上传文件的目录
private String tempPath = "C:uploadtmp"; // 临时文件目录

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
}
}
在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码:
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置最大文件尺寸,这里是4MB
fu.setSizeMax(4194304);
// 设置缓冲区大小,这里是4kb
fu.setSizeThreshold(4096);
// 设置临时目录:
fu.setRepositoryPath(tempPath);

// 得到所有的文件:
List fileItems = fu.parseRequest(request);
Iterator i = fileItems.iterator();
// 依次处理每一个文件:
while(i.hasNext()) {
FileItem fi = (FileItem)i.next();
// 获得文件名,这个文件名包括路径:
String fileName = fi.getName();
// 在这里可以记录用户和文件信息
// ...
// 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
fi.write(new File(uploadPath + "a.txt"));
}
}
catch(Exception e) {
// 可以跳转出错页面
}
}
如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行:
public void init() throws ServletException {
uploadPath = ....
tempPath = ....
// 文件夹不存在就自动创建:
if(!new File(uploadPath).isDirectory())
new File(uploadPath).mkdirs();
if(!new File(tempPath).isDirectory())
new File(tempPath).mkdirs();
}


编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jar和tomcatcommonlibservlet-api.jar。
配置servlet,用记事本打开tomcatwebapps你的webappWEB-INFweb.xml,没有的话新建一个。
典型配置如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>Upload</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
</web-app>


配置好servlet后,启动tomcat,写一个简单的html测试:
<form action="fileupload" method="post"
enctype="multipart/form-data" name="form1">
<input type="file" name="file">
<input type="submit" name="Submit" value="upload">
</form>



下载代码很简单
public void doGet(HttpServletRequest request,
                       HttpServletResponse response)
     {
         String aFilePath = null;    //要下载的文件路径
         String aFileName = null;    //要下载的文件名
         FileInputStream in = null;  //输入流
         ServletOutputStream out = null;  //输出流 

 

         try
   {
          
             aFilePath = getFilePath(request); 
             aFileName = getFileName(request);

             response.setContentType(getContentType(aFileName) + "; charset=UTF-8");
             response.setHeader("Content-disposition", "attachment; filename=" + aFileName);

             in = new  FileInputStream(aFilePath + aFileName); //读入文件
            out = response.getOutputStream();
            out.flush();
            int aRead = 0;
           while((aRead = in.read()) != -1 & in != null)
        {
             out.write(aRead);
         }
           out.flush();
      }
       catch(Throwable e)
     {
     log.error("FileDownload doGet() IO error!",e);
      }
         finally
         {
             try
             {
                 in.close();
                 out.close();
             }
             catch(Throwable e)
             {
              log.error("FileDownload doGet() IO close error!",e);
             }
         }
     }




朋友,你测试看看行不行,行的话给我分哦,我没有分啦

2010年4月13日 21:14
0 0

引用
如果路径不对的话,为什么我上传GIF成功后,能成功下载GIF图片格式的图片呢?
这个我就不清楚了,你明明保存在了D盘upload,我不懂你为什么要这么取
引用
ServletActionContext.getServletContext

().getResourceAsStream(
"/upload/" + fileName);
我打印出来是全都是null

2010年4月13日 20:26
0 0

各种文件对应的类型这里有详细的说明:
http://gznofeng.iteye.com/blog/212844

2010年4月12日 23:33
0 0

引用
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,application/zip
</param>

1,4是同一个问题是同一个问题,配置的类型不对
png:image/x-png,
jepg:image/pjpeg

2是因为路径不对

3还没来得及看

2010年4月12日 23:32

相关推荐

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    Struts2 上传和下载功能

    在Struts2中,实现文件上传和下载是常见的需求,对于用户交互和数据交换至关重要。这篇博客文章可能详细讨论了如何在Struts2框架中实现这两个功能。 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,这是...

    struts2上传和下载文件详细源码

    在这个"struts2上传和下载文件详细源码"中,我们可以深入理解Struts2如何处理文件上传和下载操作。 1. 文件上传: 在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    struts2上传下载项目

    Struts2是一个流行的Java Web框架,它为开发者提供了...通过研究这个项目,你可以更深入地了解Struts2的文件操作,包括上传和下载的流程、错误处理以及与前端交互的细节。这对于任何Java Web开发者来说都是宝贵的经验。

    Struts2文件上传下载和表单重复提交问题

    综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。

    struts2 文件的上传和下载

    在Struts2中,文件的上传和下载是常见的功能需求,特别是在处理用户表单提交、数据交换或者提供资源下载服务时。这篇博客文章将探讨如何在Struts2框架下实现文件的上传和下载操作。 首先,我们需要了解文件上传的...

    struts2图片上传并预览

    1. 添加依赖:在项目中,你需要添加Struts2的核心库和文件上传插件。Struts2的FileUpload插件提供了处理文件上传的功能。确保`struts2-core`和`struts2-convention-plugin`以及`struts2-file-uploading-plugin`在你...

    struts2上传下载实例

    在Struts2中,文件上传和下载是常见的功能需求,尤其对于处理用户提交的表单数据时,如上传图片、文档等。这个"struts2_上传下载"实例则涵盖了多种实现这些功能的方法。 首先,Struts2的文件上传依赖于Apache的...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...

    struts2 文件上传

    struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload

    struts文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户通过表单提交的文件,或者允许用户从服务器下载文件。这些功能极大地增强了Web应用的交互性和实用性。 在Struts2中实现文件上传,主要涉及到以下几...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    struts2文件上传与下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...

    struts2 上传和下载

    以下是关于Struts2文件上传和下载的详细知识点: 1. **文件上传组件**: Struts2提供了`File`、`Files`和`FileItem`等类来处理文件上传。`File`用于单个文件,`Files`则用于多个文件的上传。`FileItem`是Apache ...

    struts2真正实现上传下载完整源代码

    在Struts2中,实现文件上传和下载功能是一项常见的需求。本文将深入探讨如何使用Struts2来实现这一功能,并结合提供的"struts2真正实现上传下载完整源代码"进行分析。 首先,我们要了解Struts2中文件上传的基本原理...

Global site tag (gtag.js) - Google Analytics