`
Odysseus_110
  • 浏览: 120771 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

网页控件 上传 文件

阅读更多

使用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控件上传文件

    ### .NET 使用 FileUpload 控件上传文件 在 ASP.NET Web 应用程序中,经常需要实现文件上传功能,这可以通过使用 `FileUpload` 控件来完成。本文将详细介绍如何使用 `.NET` 中的 `FileUpload` 控件进行单个文件的...

    flash制作的上传文件控件

    标题中的“Flash制作的上传文件控件”是指利用Adobe Flash技术创建的一种交互式组件,用于在网页上实现文件上传功能。这种控件通常由ActionScript编写,ActionScript是Flash平台上的编程语言,允许开发者创建动态...

    上传文件控件简介

    在ASP.NET中,上传文件控件是Web开发中不可或缺的一部分,它允许用户从他们的本地计算机选择文件并将其发送到服务器。本篇文章将深入探讨“上传文件控件”,以`FileUpload`为例,来理解它的基本功能、使用方法以及在...

    jquery 文件批量上传控件

    3. **用户体验**:合理设置上传文件的大小限制和类型,避免用户等待时间过长,同时提供清晰的上传状态反馈。 总结,jQuery文件批量上传控件以其简洁的API、丰富的功能和良好的用户体验,成为Web开发中实现文件上传...

    网页flash多文件上传控件(asp.net)

    网页Flash多文件上传控件是ASP.NET开发中常用的一种组件,它允许用户通过Flash技术实现批量上传文件的功能。Flash作为一种跨平台的多媒体技术,能够提供更丰富的用户体验,尤其是在处理大文件上传和批量上传方面,...

    flash+js+php 上传控件

    Flash 上传控件, 用 flash 完成文件选择和上传, 后端程序实现保存功能. 上传过程与 js 交互. 控件参数 (flashvars) id: 控件标识 (与 js 交互时用以对应控件) url: 上传地址 jsobj: js 对象 (上传各阶段会调用 js ...

    网页版文件上传控件 File Upload Control For Html version:1.0.0.11

    与您的网页系统进行无缝整合,使您的系统可自如地上传文件,并能及时获取与上传文件相关的各种信息。控件提供各种调用的参数和方法,同时还有各个状态的回调函数,无论您使用自带的标准界面,或是使用自己定制的...

    Flash文件上传控件源码2012619

    4. **文件删除功能**:除了基本的上传功能,该控件还支持已上传文件的删除。这是一项实用性很强的功能,用户可以随时取消不需要的文件,减轻服务器存储负担,也便于管理上传的文件。 5. **兼容主流浏览器**:为了...

    Ajax文件上传控件

    Ajax文件上传控件是一种在网页上实现异步文件上传功能的技术,主要应用于.NET框架下的Web开发,使用C#语言编写。这种控件避免了传统文件上传时必须刷新整个页面的不便,极大地提升了用户体验。在UpdatePanel内使用...

    php版仿网易文件上传控件

    8. **安全考虑**:文件上传可能会成为XSS(跨站脚本攻击)和LFI(本地文件包含)的入口,因此,需要对上传文件进行安全检查,如禁止上传可执行文件,对文件名进行转义等。 通过以上技术,我们可以构建一个功能全面...

    超简单文件上传,只是一个控件

    3. 安全性:验证上传文件类型,防止恶意文件(如脚本、病毒)上传。可以通过检查文件扩展名来实现。 4. 处理多文件上传:ASP.NET MVC提供多文件上传支持,可以使用多个FileUpload控件或Html5的FormData对象。 在...

    aspnet使用ajax控件上传文件实现

    这个控件允许用户选择并上传文件,同时保持页面的异步性。 ```html ... ``` **3. 处理文件上传** `AjaxFileUpload`控件提供了几个关键事件,如`UploadComplete`,用于处理每个文件上传完成后触发的操作。在...

    上传控件 上传控件 上传控件

    在IT领域,上传控件是Web应用程序中一个关键的组件,它允许用户将本地计算机上的文件上传到服务器。本文将详细探讨上传控件的核心概念、功能、实现方式以及相关的技术点。 首先,上传控件的基本功能是提供一个界面...

    asp.net使用ajax控件上传文件实现

    在本主题中,“asp.net使用ajax控件上传文件实现”关注的是如何利用ASP.NET的AJAX控件来实现在不刷新页面的情况下上传文件的功能。AJAX控件库提供了多种控件,如UpdatePanel、AsyncFileUpload等,这些控件使得在...

    net使用FileUpLoad控件上传文件.

    ### .NET 使用 FileUpload 控件上传文件 在 Web 开发中,经常需要处理用户上传的文件,例如图片、文档等。.NET 框架提供了一个非常方便的控件——`FileUpload`,用于实现文件的上传功能。下面将详细介绍如何在 ASP...

    swfupload文件上传控件

    在网页开发中,文件上传功能是不可或缺的一部分,而SWFUpload就是一款优秀的文件上传控件。它利用Flash技术,提供了多文件上传和进度显示的功能,使得用户在上传大文件或多个文件时能够有更好的交互体验。 ## 一、...

    文件上传ActiveX控件

    在本例中,我们关注的是利用ActiveX控件实现文件上传的功能,特别是针对多文件上传到Web服务器的情况。 在传统的网页交互中,HTML表单的`&lt;input type="file"&gt;`元素允许用户选择单个文件进行上传。然而,如果需要...

    163上传控件

    3. **文件大小限制**:设置上传文件的最大大小,防止过大文件导致服务器压力或传输问题。 4. **预览功能**:对于图片、视频等媒体文件,提供预览功能,用户在上传前可查看内容。 5. **上传进度反馈**:实时显示每个...

    一个很好用的asp.net上传控件

    ASP.NET上传控件是网页应用开发中的重要组成部分,它允许用户在服务器端处理大量数据时上传文件。在本文中,我们将深入探讨“一个很好用的ASP.NET上传控件”,了解其特点、使用方法以及如何在项目中集成和操作。 ...

    文件上传的activex控件

    这些控件可以在客户端计算机上执行代码,处理各种任务,如播放视频、编辑文档或,正如我们关注的,上传文件。然而,由于安全问题和跨平台兼容性,ActiveX控件现在主要用于Windows系统和Internet Explorer。 二、...

Global site tag (gtag.js) - Google Analytics