使用java程序直接读取硬盘文件上传和使用控件上传其实都是一样的,都是利用 common net 包的FTPClient 等类来上传文件,不同之处就在于如何在客户端获取文件。前一种方式是通过java的流对象来读取文件(InputStream iStream = new FileInputStream(fileName);),而后一种方式要通过程序解析来自客户端的request请求来得到文件流,前一种方式的代码可以参考上一篇《ftp 文件上传 文件损坏》,对于后一种方式,首先到apache上下载 commons fileupload 包,注意这个jar是基于commons-io 的,所以同时需要下载 commons-io 包:
http://commons.apache.org/downloads/download_fileupload.cgi
http://commons.apache.org/downloads/download_io.cgi
fileupload 的示例代码:
http://commons.apache.org/fileupload/using.html
操作类:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;
import com.util.common.JavaTypeConversionHelperInterface;
/** */
/**
* 基于apache组织的commonNet开源组件实现ftp客户端<br>
* 本程序运行依赖于一个config成员变量属性,其是一个属性(Properties)对象<br>
* 系统要求这个config对象,必需有如下属性key:<br>
* server(ftp服务器ip地址或域名)<br>
* username(登录用户名)<br>
* password(登录密码)<br>
* 如下属性key是可选的:<br>
* systemKey(ftp服务器的操作系统key,如window)<br>
* serverLanguageCode(ftp服务器使用的语言,如zh)<br>
* <br>
* 本程序是线程安全,在每一个上传时都将创建ftp连接,上传结束后再关闭ftp连接<br>
*
* 例子:<br>
* InputStream localIn = new FileInputStream("c:\\计算机.txt");<br>
*
* java.util.Properties config = new Properties();<br>
* config.setProperty("server", "192.168.5.120");<br>
* config.setProperty("username", "upload");<br>
* config.setProperty("password", "upload");<br>
*
* FtpClientCommonNetImpl client = new FtpClientCommonNetImpl();<br>
* client.setConfig(config);<br>
* client.upload(localIn, "/aaa/计算机.txt", true);<br>
*
*
* @author zhangdb
*
*/
public class FtpClientCommonNetImpl {
// ftp配置
private Properties config;
private JavaTypeConversionHelperInterface iJTH;
public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE;
public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE;
/** */
/**
* 连接到ftp服务器
*
* @param server
* @param userName
* @param password
* @return
* @throws FtpException
*/
protected FTPClient connectFtpServer(String server, String userName,
String password) throws Exception {
// 创建ftp客户端对象
FTPClient ftp = new FTPClient();
try {
ftp.setControlEncoding("UTF-8");
ftp.configure(this.getFTPClientConfig());
// 连接ftp服务器
ftp.connect(server);
// 登录
ftp.login(userName, password);
// 返回值
int reply = ftp.getReplyCode();
if ((!FTPReply.isPositiveCompletion(reply))) {
ftp.disconnect();
throw new Exception(" 登录ftp服务器失败,请检查server[ " + server
+ " ]、username[ " + userName + " ]、password[ "
+ password + " ]是否正确! ");
}
ftp.setFileType(BINARY_FILE_TYPE);
return ftp;
} catch (Exception ex) {
throw new Exception(ex);
}
}
/** */
/**
* 关闭连接
*
* @param ftp
*/
protected void disconnectFtpServer(FTPClient ftp) throws Exception {
try {
ftp.logout();
ftp.disconnect();
} catch (Exception ex) {
throw new Exception(ex);
}
}
/** */
/**
* 上传
*/
public void upload(InputStream localIn, String remoteFilePath)
throws Exception {
String server = this.config.getProperty("server");
String userName = this.config.getProperty("username");
String password = this.config.getProperty("password");
FTPClient ftp = this.connectFtpServer(server, userName, password);
try {
//boolean result = ftp.storeFile(this.enCodingRemoteFilePath(remoteFilePath), localIn);
System.out.println(remoteFilePath);
boolean result = ftp.storeFile(remoteFilePath, localIn);
if (!result) {
throw new Exception(" 文件上传失败! ");
}
} catch (Exception ex) {
ex.printStackTrace();
throw new Exception(ex);
} finally {
this.disconnectFtpServer(ftp);
}
}
/** */
/**
* 上传结束以后关闭输入流
*
* @param localIn
* @param remoteFilePath
* @param afterUploadCloseInputStream
* @throws FtpException
*/
public void upload(InputStream localIn, String remoteFilePath,
boolean afterUploadCloseInputStream) throws Exception {
try {
// 上传
this.upload(localIn, remoteFilePath);
} finally {
if (afterUploadCloseInputStream) {
if (localIn != null) {
try {
localIn.close();
} catch (Exception ex) {
throw new Exception(ex);
}
}
}
}
}
/** */
/**
* (www.iocblog.net 文章来源) 得到配置
*
* @return
*/
protected FTPClientConfig getFTPClientConfig() {
// 创建配置对象
/*FTPClientConfig conf = new FTPClientConfig(this.config.getProperty(
"systemKey", FTPClientConfig.SYST_NT));
conf.setServerLanguageCode(this.config.getProperty(
"serverLanguageCode", "zh"));*/
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
return conf;
}
/** */
/**
* 远程文件路径编码(上传到ftp上的文件路径)
*
* @param remoteFilePath
* @return
*/
protected String enCodingRemoteFilePath(String remoteFilePath)
throws Exception {
return iJTH.GBK2ISO(remoteFilePath);
}
public Properties getConfig() {
return config;
}
public void setConfig(Properties config) {
this.config = config;
}
/**
* @return the iJTH
*/
public JavaTypeConversionHelperInterface getIJTH() {
return iJTH;
}
/**
* @param ijth
* the iJTH to set
*/
public void setIJTH(JavaTypeConversionHelperInterface ijth) {
iJTH = ijth;
}
}
servlet测试类import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.util.common.JavaTypeConversionHelper;
import com.util.ftp.FtpClientCommonNetImpl;
public class TestFTP extends HttpServlet {
/**
* Constructor of the object.
*/
public TestFTP() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Check that we have a file upload request
boolean isMultipart;
try {
isMultipart = ServletFileUpload.isMultipartContent(request);
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
//factory.setSizeThreshold(yourMaxMemorySize);
//factory.setRepository(yourTempDirectory);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
//upload.setSizeMax(yourMaxRequestSize);
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fieldName = item.getFieldName();
if(!fieldName.equalsIgnoreCase("defaults_0")) {
String fileName = item.getName();
String[] folders = fileName.split("\\"+File.separator);
String shortFileName = folders[folders.length-1];
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.println(fieldName + "|"+fileName + "|" + shortFileName);
InputStream localIn = new FileInputStream(fileName);
//工具类,转码用。
JavaTypeConversionHelper jth = new JavaTypeConversionHelper();
Properties config = new Properties();
config.setProperty("server", "192.168.17.48");
config.setProperty("username", "admin");
config.setProperty("password", "123456");
FtpClientCommonNetImpl client = new FtpClientCommonNetImpl();
client.setConfig(config);
client.setIJTH(jth);
client.upload(localIn, shortFileName, true);
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
参考:
http://hejianke83.blog.163.com/blog/static/607651620088825458211/
http://commons.apache.org/fileupload/using.html
分享到:
相关推荐
### .NET 使用 FileUpload 控件上传文件 在 ASP.NET Web 应用程序中,经常需要实现文件上传功能,这可以通过使用 `FileUpload` 控件来完成。本文将详细介绍如何使用 `.NET` 中的 `FileUpload` 控件进行单个文件的...
标题中的“Flash制作的上传文件控件”是指利用Adobe Flash技术创建的一种交互式组件,用于在网页上实现文件上传功能。这种控件通常由ActionScript编写,ActionScript是Flash平台上的编程语言,允许开发者创建动态...
在ASP.NET中,上传文件控件是Web开发中不可或缺的一部分,它允许用户从他们的本地计算机选择文件并将其发送到服务器。本篇文章将深入探讨“上传文件控件”,以`FileUpload`为例,来理解它的基本功能、使用方法以及在...
3. **用户体验**:合理设置上传文件的大小限制和类型,避免用户等待时间过长,同时提供清晰的上传状态反馈。 总结,jQuery文件批量上传控件以其简洁的API、丰富的功能和良好的用户体验,成为Web开发中实现文件上传...
网页Flash多文件上传控件是ASP.NET开发中常用的一种组件,它允许用户通过Flash技术实现批量上传文件的功能。Flash作为一种跨平台的多媒体技术,能够提供更丰富的用户体验,尤其是在处理大文件上传和批量上传方面,...
Flash 上传控件, 用 flash 完成文件选择和上传, 后端程序实现保存功能. 上传过程与 js 交互. 控件参数 (flashvars) id: 控件标识 (与 js 交互时用以对应控件) url: 上传地址 jsobj: js 对象 (上传各阶段会调用 js ...
与您的网页系统进行无缝整合,使您的系统可自如地上传文件,并能及时获取与上传文件相关的各种信息。控件提供各种调用的参数和方法,同时还有各个状态的回调函数,无论您使用自带的标准界面,或是使用自己定制的...
4. **文件删除功能**:除了基本的上传功能,该控件还支持已上传文件的删除。这是一项实用性很强的功能,用户可以随时取消不需要的文件,减轻服务器存储负担,也便于管理上传的文件。 5. **兼容主流浏览器**:为了...
Ajax文件上传控件是一种在网页上实现异步文件上传功能的技术,主要应用于.NET框架下的Web开发,使用C#语言编写。这种控件避免了传统文件上传时必须刷新整个页面的不便,极大地提升了用户体验。在UpdatePanel内使用...
8. **安全考虑**:文件上传可能会成为XSS(跨站脚本攻击)和LFI(本地文件包含)的入口,因此,需要对上传文件进行安全检查,如禁止上传可执行文件,对文件名进行转义等。 通过以上技术,我们可以构建一个功能全面...
3. 安全性:验证上传文件类型,防止恶意文件(如脚本、病毒)上传。可以通过检查文件扩展名来实现。 4. 处理多文件上传:ASP.NET MVC提供多文件上传支持,可以使用多个FileUpload控件或Html5的FormData对象。 在...
这个控件允许用户选择并上传文件,同时保持页面的异步性。 ```html ... ``` **3. 处理文件上传** `AjaxFileUpload`控件提供了几个关键事件,如`UploadComplete`,用于处理每个文件上传完成后触发的操作。在...
在IT领域,上传控件是Web应用程序中一个关键的组件,它允许用户将本地计算机上的文件上传到服务器。本文将详细探讨上传控件的核心概念、功能、实现方式以及相关的技术点。 首先,上传控件的基本功能是提供一个界面...
在本主题中,“asp.net使用ajax控件上传文件实现”关注的是如何利用ASP.NET的AJAX控件来实现在不刷新页面的情况下上传文件的功能。AJAX控件库提供了多种控件,如UpdatePanel、AsyncFileUpload等,这些控件使得在...
### .NET 使用 FileUpload 控件上传文件 在 Web 开发中,经常需要处理用户上传的文件,例如图片、文档等。.NET 框架提供了一个非常方便的控件——`FileUpload`,用于实现文件的上传功能。下面将详细介绍如何在 ASP...
在网页开发中,文件上传功能是不可或缺的一部分,而SWFUpload就是一款优秀的文件上传控件。它利用Flash技术,提供了多文件上传和进度显示的功能,使得用户在上传大文件或多个文件时能够有更好的交互体验。 ## 一、...
在本例中,我们关注的是利用ActiveX控件实现文件上传的功能,特别是针对多文件上传到Web服务器的情况。 在传统的网页交互中,HTML表单的`<input type="file">`元素允许用户选择单个文件进行上传。然而,如果需要...
3. **文件大小限制**:设置上传文件的最大大小,防止过大文件导致服务器压力或传输问题。 4. **预览功能**:对于图片、视频等媒体文件,提供预览功能,用户在上传前可查看内容。 5. **上传进度反馈**:实时显示每个...
ASP.NET上传控件是网页应用开发中的重要组成部分,它允许用户在服务器端处理大量数据时上传文件。在本文中,我们将深入探讨“一个很好用的ASP.NET上传控件”,了解其特点、使用方法以及如何在项目中集成和操作。 ...
这些控件可以在客户端计算机上执行代码,处理各种任务,如播放视频、编辑文档或,正如我们关注的,上传文件。然而,由于安全问题和跨平台兼容性,ActiveX控件现在主要用于Windows系统和Internet Explorer。 二、...