小弟是用 SERV-U的服务器!昨天小弟在网上找了一天的资料 还没有解决。现在高分200分悬赏,JSP - FTP 上传下载实例! 请各位大侠帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SOS!小弟邮箱 [email protected]!!!! 最好是纯的简单实例。当然做的好看最好行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@@@@@@@@@@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@@@@@@@@@@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
解决方案 »
- 购物网站要开发一个购买商品的优惠活动的功能:比如顾客订单满100元,优惠10元或者返利10元。应该怎么实现呢?
- 网页爬虫,只爬指定区域(或说指定table)中的内容可以做到么?(java)
- jsp页面使用<a>标签进行转向的时候如何获取链接的信息
- request.getRemoteAddr()获得错误的IP如何解决
- 关于AJAX的棘手问题~~ 多谢了~~~~~~~~~~~~~~~~~
- jsp编译出错,请高手帮帮忙
- 有关taglib的问题
- 请问:在URL中有哪些ASCII字符有特殊含义?(在线等)
- 请问在TOMCAT下面怎么样配置存放运行SERVELET的路径?
- java中时间问题 去每周二
- 如何编写安全登陆模块
- JSP + Access 使用Group By 操作,为什么会出一批空记录,以null的形式打印出来
希望对你有帮助
String id=request.getParameter("xz_id");
String sql="select * from tb_xz where id="+id;
ResultSet rs=co.query(sql);
String name="";
String src="";
if(rs.next()){
name=rs.getString("name")+".xsl";
src=rs.getString("src");
System.out.println(name);
System.out.println(src);
}
//关于文件下载时采用文件流输出的方式处理:
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个;
//因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,
//而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,
//就会发生:getOutputStream() has already been called for this response的错误
//详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270
//而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件
//下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。
response.reset();//可以加也可以不加
response.setContentType("application/x-download");//设置为下载application/x-download
// /../../退WEB-INF/classes两级到应用的根目录下去,注意Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/
System.out.println(this.getClass().getClassLoader().getResource("/").getPath()+"../../upload");
System.out.println("!!!!!!!!"+request.getSession().getServletContext().getRealPath("/")+"!!!!!!!!");
String filenamedownload = request.getSession().getServletContext().getRealPath("/") + "upload/"+src;
String filenamedisplay = name;//系统解决方案.txt
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
OutputStream output = null;
FileInputStream fis = null;
try
{
output = response.getOutputStream();
fis = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = fis.read(b)) > 0)
{ output.write(b, 0, i);
}
output.flush();
}
catch(Exception e)
{
System.out.println("Error!");
}
finally
{
if(fis != null)
{
fis.close();
fis = null;
}
if(output != null)
{
output.close();
output = null;
}
}
%>
package servlet;
import java.io.IOException;
import java.util.Date;
import java.util.Hashtable;
import javabean.conn;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import javazoom.upload.MultipartFormDataRequest;
import javazoom.upload.UploadBean;
import javazoom.upload.UploadException;
import javazoom.upload.UploadFile;
public class AddProduct extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost( request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
request.setCharacterEncoding("UTF-8"); MultipartFormDataRequest mrequest=null;
try {
mrequest = new MultipartFormDataRequest(request,null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"UTF-8");
} catch (UploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
UploadBean upBean = new UploadBean();
String path = request.getRealPath("/upload");
System.out.println(path+"------------------path-");
try {
upBean.setFolderstore(path);
System.out.println("--------11-----");
} catch (UploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//上传到哪
upBean.setParser(MultipartFormDataRequest.CFUPARSER);
upBean.setParsertmpdir("c:/temp");
String picture = new Date().toLocaleString()+(int)(Math.random()*1000);
picture = picture.replace(" ", "");
picture = picture.replace(":", "");
picture = picture.replace("-", "");
Hashtable files = mrequest.getFiles();
System.out.println("------222------");
UploadFile file = (UploadFile) files.get("picture");
String name = file.getFileName();
if(name.endsWith(".jpg")||name.endsWith(".JPG")){
picture += ".jpg";
}else if(name.endsWith(".bmp")||name.endsWith(".bmp")){
picture += ".bmp";
}else if(name.endsWith(".gif") || name.endsWith(".GIF")){
picture += ".gif";
}else if(name.endsWith(".png") || name.endsWith(".PNG")){
picture += ".png";
}else {
request.setAttribute("mess", "上传的文件格式有误");
request.getRequestDispatcher("addpro.jsp").forward(request, response);
return ;
}
System.out.println("------33-------");
try {
file.setFileName(picture);
upBean.store(mrequest, "picture");
} catch (UploadException e) {
e.printStackTrace();
}
String product = mrequest.getParameter("product");
System.out.println("-------4------");
conn cn = new conn();
Date date = new Date();
String sql = "insert into pictrue(name,pictrue) values('"+product+"','"+picture+"')";
System.out.println(sql+"-----5--------");
cn.update(sql);
try {
cn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("mess", "上传成功");
request.getRequestDispatcher("addpro.jsp").forward(request, response);
}
}
<html>
<head>
<title>文件上传 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p> </p>
<p align="center">上传文件选择 </p>
<FORM METHOD="POST" ACTION="doupload.jsp"
ENCTYPE="multipart/form-data">
<input type="hidden" name="TEST" value="good">
<table width="75%" border="1" align="center">
<tr>
<td> <div align="center">1、
<input type="FILE" name="FILE1" size="30">
</div> </td>
</tr>
<tr>
<td> <div align="center">
<input type="submit" name="Submit" value="上传它!">
</div> </td>
</tr>
</table>
</FORM>
</body>
</html> <%@ page contentType="text/html; charset=gb2312" language="java"
import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
<html>
<head>
<title>文件上传处理页面 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head> <body>
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initia lize(pageContext);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
// su.setMaxFileSize(10000);
// 2.限制总上传数据的长度。
// su.setTotalMaxFileSize(20000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
jsp,htm,html扩展名的文件和没有扩展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
int count = su.save("/upload");
out.println(count+"个文件上传成功! <br>"); // 利用Request对象获取参数之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+" <BR> <BR>"); // 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i <su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i); // 若文件不存在则继续
if (file.isMissing()) continue; // 显示当前文件信息
out.println(" <TABLE BORDER=1>");
out.println(" <TR> <TD>表单项名(FieldName) </TD> <TD>"
+ file.getFieldName() + " </TD> </TR>");
out.println(" <TR> <TD>文件长度(Size) </TD> <TD>" +
file.getSize() + " </TD> </TR>");
out.println(" <TR> <TD>文件名(FileName) </TD> <TD>"
+ file.getFileName() + " </TD> </TR>");
out.println(" <TR> <TD>文件扩展名(FileExt) </TD> <TD>"
+ file.getFileExt() + " </TD> </TR>");
out.println(" <TR> <TD>文件全名(FilePathName) </TD> <TD>"
+ file.getFilePathName() + " </TD> </TR>");
out.println(" </TABLE> <BR>"); // 将文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFhttp://topic.csdn.net/u/20080908/09/AFEC1526-798D-4226-A50A-4CC009B5E5D3.htmlile.getFileName(),
su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c:\\temp\\" + myFile.getFileName(),
su.SAVE_PHYSICAL); }
%>
</body>
</html>
<head>
<title>下载 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<a href="jsp/do_download.jsp">点击下载 </a>
</body> > </html> do_download.jsp:
<%@ page contentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*" %> <%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
// 设定contentDisposition为null以禁止浏览器自动打开文件,
//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,
//浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile("/upload/如何赚取我的第一桶金.doc");
%>
注意,执行下载的页面,在Java脚本范围外(即 <% ... %>之外),不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。不信的话,可以在上述源码中%> <%之间加入一个换行符,再下载一下,保证出错。因为它影响了返回给浏览器的数据流,导致解析出错。 3、如何下载中文文件 jspSmartUpload虽然能下载文件,但对中文支持不足。若下载的文件名中有汉字,则浏览器在提示另存的文件名时,显示的是一堆乱码,很扫人兴。上面的例子就是这样。 为了给jspSmartUpload组件增加下载中文文件的支持,我对该组件进行了研究,发现对返回给浏览器的另存文件名进行UTF-8编码后,浏览器便能正确显示中文名字了。这是一个令人高兴的发现。于是我对jspSmartUpload组件的SmartUpload类做了升级处理,增加了toUtf8String这个方法,改动部分源码如下: public void downloadFile(String s, String s1, String s2, int i)
throws ServletException, IOException, SmartUploadException
{
if(s == null)
throw new IllegalArgumentException("File '" + s +"' not found (1040).");
if(s.equals(""))
throw new IllegalArgumentException("File '" + s +
"' not found (1040).");
if(!isVirtual(s) && m_denyPhysicalPath)
throw new SecurityException("Physical path is
denied (1035).");
if(isVirtual(s))
s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition != null ?
m_contentDisposition : "attachment;";
if(s2 == null)
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" +
toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
int j = fileinputstream.read(abyte0, 0, i);
k += j;
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
} /**
* 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
* @param s 原文件名
* @return 重新编码后的文件名
*/
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i <s.length();i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) k += 256;
sb.append("%" + Integer.toHexString(k).
toUpperCase());
}
}
}
return sb.toString();
} 注意源码中粗体部分,原jspSmartUpload组件对返回的文件未作任何处理,现在做了编码的转换工作,将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理,对中文则需要转换为%XX的形式。toUtf8String方法中,直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码,之后将其转换为%XX的形式。 将源码编译 后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目录下(可为所有WEB应用程序所共享),然后重启Tomcat服务器就可以正常下载含有中文名字的文件了。另,toUtf8String方法也可用于转换含有中文的超级链接,以保证链接的有效,因为有的WEB服务器不支持中文链接。
private FTPClient client = null; //操作类
---登陆
client.setControlEncoding("GBK");// 设置登陆编码格式
client.setConnectTimeout(60000);// 超时60秒
client.connect(host.trim(), port);// 连接FTP
--下载
client.setFileType(FTP.BINARY_FILE_TYPE);//设置为二进制传输
if(lff.getIsFileExists(file)){//判断本地文件是否存在,如果存在并且长度小于FTP文件的长度时断点续传;返之新增
long size = this.getSize(pathName);
long localFileSize = lff.getSize(file);
if(localFileSize > size){
return false;
}
out = new FileOutputStream(file,true);
client.setRestartOffset(localFileSize);
flag = client.retrieveFile(new String(pathName.getBytes(),client.getControlEncoding()),out);
out.flush();
} else{
out = new FileOutputStream(file);
flag = client.retrieveFile(new String(pathName.getBytes(),client.getControlEncoding()),out);
out.flush();
}