1.upload.setsizemax;为ä»ä¹è¿è½ä¸ä¼
2.FtpClient
upload.setsizemax;为ä»ä¹è¿è½ä¸ä¼
æ以å项ç®ä½¿ç¨è¿ï¼ä½æ¯åæ¥è¢«æå¼äºï¼å 为jspsmartupload.jarå·²ç»å¾ä¹ 没ææ´æ°ï¼èä¸å®å¨ä¸ä¼ 大æ件æ¶ä¼æé®é¢å»ºè®®ä½¿ç¨commons-fileupload.jar(å¦å¤éè¦commons-io.jar)ä¸é¢ä¸ºé¨åæºä»£ç ï¼/**Create a factory for disk-based file items*/DiskFileItemFactory factory = new DiskFileItemFactory();/**设置æ大çå å大å°*/factory.setSizeThreshold();/**å建ä¸ä¸ªæ°çæ件ä¸ä¼ æä½*/ServletFileUpload upload = new ServletFileUpload(factory);/**设置è½ä¸ä¼ çæ大æ件ç大å°*/upload.setSizeMax(*);/**Parse the request*/List fileItems = upload.parseRequest(request);//å¼å§è¯»åä¸ä¼ ä¿¡æ¯Iterator iter = fileItems.iterator();// ä¾æ¬¡å¤çæ¯ä¸ªä¸ä¼ çæ件while(iter.hasNext()) { FileItem item = (FileItem) iter.next();// 忽ç¥å ¶ä»ä¸æ¯æ件åçææ表åä¿¡æ¯if (!item.isFormField()) { String name = item.getName();String endName = name.substring(name.lastIndexOf(".") + 1);try{ item.write(new File(request.getRealPath("\\"+sUploadDir+FileName+"."+ endName)));}catch(Exception e){ e.printStackTrace();}
FtpClient
当时我用SUN 的FtpClient.get()方法下载文件是有问题的,我推荐你用org.apache.commons.net.ftp.FTPClient下载文件,可以解决中文文件下载问题,你可以去我博客里看看哦:/renliangli/blog/item/6ccb6b3adc9da5.html,android 源码分支下载文章摘给你吧:
现在就来看下我解决的代码吧,希望对遇到同样问题的源码写代码人有点帮助。
1)把ftp地址中的文件保存到本地的java类源码:
package test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class Ftp {
/**
* Description: 从FTP服务器下载文件
* @param ip FTP服务器的ip地址
* @param port FTP服务器端口,默认为:
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downFile(String ip, int port,String username, String password, String remotePath,String fileName,String localPath) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
//下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);//登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for(int i = 0; i < fs.length; i++){
FTPFile ff = fs[i];
if(ff.getName().equals(fileName)){
File localFile = new File(localPath+File.separator+ff.getName());
//
OutputStream is = new FileOutputStream(localFile);
//注意此处retrieveFile的第一个参数由GBK转为ISO--1编码。否则下载后的文件内容为空。
//原因可能是hdmi lpcm 源码由于aix系统默认的编码为ISO--1
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO--1"), is);
is.close();
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Ftp.downFile("...", , "test", "test", "/flashfxp", "激活码.txt", "C:");
}
}
2)将ftp资源以文件流的方式打开,由用户决定保存在本地何处,程序运行后可以从IE跳出框中打开或者保存的Action代码,利用Struts1写的pwm源码codesys:
/
** Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.mocha.test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.mons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class DownloadAction extends Action{
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
* @throws IOException
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException{
OutputStream os=null;
try {
os = response.getOutputStream();
response.reset();
downFile("...", , "test", "test", "/flashfxp", "激活码.txt",os,response);
} catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try{
os.close();
} catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
/**
* Description: 从FTP服务器下载文件
* @param ip FTP服务器ip地址
* @param port FTP服务器端口,默认为
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath 附件在FTP服务器上的绝对路径
* @param fileName 要下载的文件名
* @param outputStream 输出流
* @param response
* @return
*/
public static boolean downFile(String ip, int port,String username, String password, String remotePath
,String fileName,OutputStream outputStream,HttpServletResponse response) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
//下面三行代码必须要,而且不能改变编码格式
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
//如果采用默认端口,可以使用ftp.connect(url)的计划日历源码方式直接连接FTP服务器
ftp.login(username, password);//登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for(int i = 0; i < fs.length; i++){
FTPFile ff = fs[i];
if(ff.getName().equals(fileName)){
String filename = fileName;
//这个就就是弹出下载对话框的关键代码
response.setHeader("Content-disposition",
"attachment;filename=" +
URLEncoder.encode(filename, "utf-8"));
//将文件保存到输出流outputStream中
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO--1"), outputStream);
outputStream.flush();
outputStream.close();
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
}
差点忘了利用ftpclient要用到的jar包了,呵呵,就这两个了:commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar
对了我用的jdk是1.4的。所以commons-net-1.4.1.jar用了这个版本比较老的。