`
Odysseus_110
  • 浏览: 117045 次
  • 性别: 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

分享到:
评论

相关推荐

    flash+js+php 上传控件

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

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

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

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

    flash 多文件上传控件。asp.net

    java 大文件.图片.视频 上传控件 mupload

    打包后的组件经过数字签名后可以嵌入网页,并允许客户端上传文件到服务器,该组件包括一个jar文件和一个js文件,使用js在需要的地方创建该网页组件即可实现文件上传!该组件可以很好的支持IE和FF,同时允许客户端...

    网页文件上传组件CharlieFtpUpload_V2.rar

    1. 本控件主要为解决网页上传文件问题设计,当然用在Winform和Webform都可以; 2. 本控件为ActiveX控件,基于FTP传输协议;当然就适用于任何的开发语言啦,只要客户端游览器支持ActiveX就可以; 3. 控件可进行单个...

    .NET Web上传文件控件源码

    上传文件控件,实现让用户在客户端选择一个文件,然后放到Web服务器的某个指定的文件夹下。

    VC写的上传文件到FTP服务器的OCX控件,网页可调用

    VC封装的OCX控件,可把指定文件上传到指定FTP服务器上.

    多文件上传和展示

    bootstrap-fileinput-master多文件上传,多文件预览,网页的代码地址为https://mp.csdn.net/postedit/84098479

    第九章 在网页中实现文件上传源文件.rar_vc 上传_上传文件_文件上传_文件上传组件_网页 vc

    开发以一个全功能的ASP文件上传组件,分析网页中传来的文件数据,提供接口供ASP程序调用该组件保存数据... 编写Web页供用户选择上传文件。 编写ASP文件调用文件上传组件,将文件保存到服务器文件系统中。VC提供的控件。

    网页上传附件的控件代码

    该控件可达到控制上传附件的文件类型、大小的功能,代码比较简单,便于修改。

    flash批量上传控件(可直接嵌入网页)

    一个非常优秀的flash批量上传文件的控件,可以直接嵌入在网页中使用

    网页验证码控件

    这是一个网页上用的验证码控件,可以用在注册,上传文件的地方来添加验证,用法很简单,一看就明白。

    Silverlight多文件上传 v4.2源码

    提供了几种上传模式,单文件,多文件,集成js文件的方式上传文件。 将Silverlight上传工具集成到网页文件中需要进行简单的配置,看 如下各项参数作用。 配置: MaxFileSizeKB: 文件大小 KBs. MaxUploads: 同时上传...

    ftp上传控件

    ftp上传控件(FTP ActiveX OCX Control)是用Scoket API实现的FTP功能的客户端控件,可以在网页中实现上传文件的功能,可以在多种开发环境中使用,如VB,VC,C#,.net,PB,Delphi等。 &gt;&gt;上传、下载单个多个文件或目录,...

    大文件上传(进度条显示)组件及演示源码

    一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了,这时可以用NeatUpload来上传,步骤如下: 1,在工具箱中添加Brettle.Web.NeatUpload....

    基于SwfUpload插件的文件批量上传插件GooUploader

    使用了本控件后,在后台编写代码时,不必编写实时监控文件上传进度的复杂代码,只用编写简单的处理保存上传文件的代码即可,因为FLASH插件会自动帮助算出上传进度,并实时定时给控件提供进度显示数据,这样就减轻了...

    NTKO附件管理控件

    NTKO附件管理控件(多文件上传下载在线编辑扫描控件)是拥有完全独立知识产权的多附件上传控件.使用NTKO附件管理控件[多文件上传控件],能够在浏览器中启动原始文件对应的应用程序,对图像文件,OFFICE文件,文本文件,...

    CuteEditor6.4网页编辑器 文本编辑控件

    CuteEditor还集成了文件(包括图片、文档等)上传、媒体(包括视频、声音等,支持YouTube)文件直接插入等对你来说非常实用的功能模块。 对于商业授权用户,他们以完全自己进行操作升级和安全维护,我们制定了多种授权...

    多文件上传组件FTP网页版

    本控件为FTP网页ocx,支持多文件上传、断点续传、拖动上传、配置简单、上传稳定,可以作为网页的上传组件使用。 内有使用说明。

    文件批量上传客户端免费组件 v1.0.7 for php.rar

    1.修正了所有文件上传完成后触发事件会在最后一个文件返回信息前触发的BUG   2.在所有文件上传完毕出发事件,JAVASCRIPT函数challs_flash_onCompleteData 里面添加一个返回参数,记录了此次上传失败的数量

Global site tag (gtag.js) - Google Analytics