Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)

        折腾了我两天的使用JSPSmartUpload控件进行文件的上传和下载问题终于被解决了,现在将要注意的几个点整理出来,方便自己以后查询的同时分享给大家(内容有参考网上其他博客),希望以后文件的上传和下载不再困扰大家。

一、为了方便将上传和下载的代码放到一个JSP页面中,方便测试和学习,代码如下:

<%@ page language="java" contentType="text/html;charset=GBK" import="java.util.*"%>

<html>
<head>
<title>File Upload and Download</title>
</head>

<body>
<font size=5 color=#FF0000> <b>文件上传----使用jspsmart upload组件</b> </font>
<br>
<form action="upload.do" method="post" enctype="multipart/form-data">
<p>
文件名称: <input type="file" name="file1" size="20" maxlength="80">
</p>
<p>
文件名称: <input type="file" name="file2" size="20" maxlength="80">
</p>
<p>
文件名称: <input type="file" name="file3" size="20" maxlength="80">
</p>
<p>
<input type="submit" value="上传"> 
<input type="reset" value="重置">
</p>
</form>

<font size=5 color=#FF0000> <b>文件下载----使用jspsmart upload组件</b> </font>
<br>
<form action="download.do" method="post">
<p>
下载文件的名称: <input type="text" name="downloadFileName" size="20" maxlength="80">
</p>
<input type="submit" value="下载">
</form>
</body>
</html>
代码说明:

1、上传时编码格式必须为GBK格式,下载时可以为GBK也可以为UTF-8格式。   

2、上传时<input type="file" name="file1" size="20" maxlength="80">中的name的名字可以为任意字符串(“”都可以),但必须指定name属性,后台处理时不通过name属性获取文件路径及文件名。

3、上传时<input type="file" name="file1" size="20" maxlength="80">的个数不限,即可以一次上传多个文件,但多个文件对应的file的name属性值必须不一样。

4、点击上传按钮,可以将选中的多个文件一次上传到服务器端,如果没选文件,则不进行上传。

5、本测试中使用输入要下载的文件名的方式进行文件下载,点击下载按钮实现文件的下载。

5、两个form表单对应的action可以是任何控制器类,此处使用两个Servlet,方便实现,容易测试(其他控制器类的移植是一样的,核心代码不变)。

6、文件上传时的form表单中必须有<form action="upload.do" method="post"enctype="multipart/form-data">

二、文件上传Servlet类ServletUpload.java的实现如下:

package edu.uestc.updown;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartUpload;

public class ServletUpload extends HttpServlet {

private static final long serialVersionUID = 1L;
private ServletConfig config;

final public void init(ServletConfig config) throws ServletException {
this.config = config;
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<BODY BGCOLOR='white'>");
out.println("<H1>jspSmartUpload : Servlet Sample</H1>");
out.println("<HR>");

// 变量定义
int count = 0;
SmartUpload mySmartUpload = new SmartUpload();
try {
//Smart上传三句核心代码
mySmartUpload.initialize(config, request, response);
mySmartUpload.upload();
count = mySmartUpload.save("/upload");


out.println(count + " file uploaded.");
} catch (Exception e) {
out.println("Unable to upload the file.<br>");
out.println("Error : " + e.toString());
}
out.println("</BODY>");
out.println("</HTML>");
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

代码说明:

1、该ServletUpload类对应的JSP页面的编码格式必须为GBK格式(易错点)。

2、count = mySmartUpload.save("/upload");中的save()方法的参数是文件上传到服务器端的路径,相对于工程名(WebRoot)的路径,count表示总共上传的文件的个数。

3、上传过程和JSP页面的file中的name属性值没关系,而是在内部进行提取处理的。

三、文件下载Servlet类ServletDownload.java的实现如下:

package edu.uestc.updown;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartUpload;

public class ServletDownload extends HttpServlet {

private static final long serialVersionUID = 1L;
private ServletConfig config;

final public void init(ServletConfig config) throws ServletException {
this.config = config;
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("GBK");
String fileName= (String)request.getParameter("downloadFileName");

SmartUpload mySmartUpload = new SmartUpload();
try {

//Smart下载三句核心代码
mySmartUpload.initialize(config, request, response);
mySmartUpload.setContentDisposition(null);        //下载时不在浏览器中显示
mySmartUpload.downloadFile("/upload/" + fileName);

} catch (Exception e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

代码说明:

1、如果下载的JSP页面的编码格式是GBK,则在代码中需要加入一句request.setCharacterEncoding("GBK");   如果下载的JSP页面的编码格式是UTF-8,则不需要这一句转码语句。

2、mySmartUpload.downloadFile("/upload/" + fileName);参数要和上传时候的文件路径保持一致。


总结:通过以上三点就可以实现所有文件的上传和下载,使用时注意几个关键点。JSPSmartUpload控件最大的优点是使用简单,操作方便。

使用jar包的链接为:http://download.csdn.net/detail/liuhaolzjtu/4574428

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值