Java文件上传下载
JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

JavaWeb⽂件上传下载实例讲解(酷炫的⽂件上传技术)⼀、课程概述在Web应⽤系统开发中,⽂件上传功能是⾮常常⽤的功能,今天来主要讲讲JavaWeb中的⽂件上传功能的相关技术实现,并且随着互联⽹技术的飞速发展,⽤户对⽹站的体验要求越来越⾼,在⽂件上传功能的技术上也出现许多创新点,例如异步上传⽂件,拖拽式上传,黏贴上传,上传进度监控,⽂件缩略图,⼤⽂件断点续传,⼤⽂件秒传等等。
本课程需要的基础知识:了解基本的Http协议内容基本IO流操作技术Servlet基础知识javascript/jQuery技术基础知识⼆、⽂件上传的基础对于⽂件上传,浏览器在上传的过程中是将⽂件以流的形式提交到服务器端的,并且所有流数据都会随着Http请求携带到服务器端。
所以,⽂件上传时的请求内容格式要能够基本看懂。
⽂件上传页⾯:<form action="/itheimaUpload/UploadServlet" method="post" enctype="multipart/form-data">请选择上传的⽂件:<input type="file" name="attach"/><br/><input type="submit" value="提交"/></form>Http请求内容:三、Java后台使⽤Servlet接收⽂件如果使⽤Servlet获取上传⽂件的输⼊流然后再解析⾥⾯的请求参数是⽐较⿇烦,所以⼀般后台选择采⽤Apache的开源⼯具common-fileupload这个⽂件上传组件。
//Java后台代码:Commons-fileUpload组件上传⽂件public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.配置缓存DiskFileItemFactory factory = new DiskFileItemFactory(1*1024*1024,new File("c:/tempFiles/"));//2.创建ServleFileUpload对象ServletFileUpload sfu = new ServletFileUpload(factory);//解决⽂件名称中⽂问题sfu.setHeaderEncoding("utf-8");//3.解析try {List<FileItem> list = sfu.parseRequest(request);//解析所有内容if(list!=null){for(FileItem item:list){String fieldName = item.getFieldName();//获取表单参数值String value = item.getString("utf-8");}else{//⽂件if(item.getName()!=null && !item.getName().equals("")) {//保存到服务器硬盘FileUtils.copyInputStreamToFile(item.getInputStream(), new File("c:/targetFiles/"+item.getName()));item.delete();}}}}} catch (FileUploadException e) {e.printStackTrace();}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}四、使⽤WebUploader上传组件⽂件上传页⾯的前端我们可以选择使⽤⼀些⽐较好⽤的上传组件,例如百度的开源组件WebUploader,这个组件基本能满⾜⽂件上传的⼀些⽇常所需功能,如异步上传⽂件,拖拽式上传,黏贴上传,上传进度监控,⽂件缩略图,甚⾄是⼤⽂件断点续传,⼤⽂件秒传。
java实现文件上传、下载

tomcat上传文件下载文件首先介绍一下我们需要的环境:我用的是myeclipse8.5的java开发环境,tomcat是用的apache-tomcat-6.0.26这个版本。
首先先需要准备一下使用到的jar包这些jar包是struts2的jar包。
这些jar包是都是用于上传文件的。
注意:这里的jar包版本必须是对应的,如不是可能会tomcat下报错。
所以大家最好注意一下啊。
最好是用这套jar包。
我将会在csdn上将项目jar包发上去。
Jar下载地址(0分):/detail/woaixinxin123/4193113 源代码下载(10分):/detail/woaixinxin123/4193134开始搭建我们的项目。
创建web项目名字为File。
第一步:搭建struts2框架。
1、到jar包。
2、编辑web.xml<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><!-- 增加struts2的支持 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>3、添加struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts></struts>4、启动tomcat测试。
Java文件上传与文件下载实现方法详解

Java⽂件上传与⽂件下载实现⽅法详解本⽂实例讲述了Java⽂件上传与⽂件下载实现⽅法。
分享给⼤家供⼤家参考,具体如下:Java⽂件上传数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。
⽂件上传是数据上传的⼀种特例,指客户端向服务器上传⽂件。
即将保存在客户端的⽂件上传⼀个副本到服务器,并保存在服务器中。
1、上传表单要求⽂件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。
必须将<form/>标签的enctype属性值设为“multipart/form-data”,enctype表⽰encodingType,及编码类型由于客户端上传⽂件的⼤⼩是不确定的,所以http协议规定,⽂件上传的数据要存放于请求正⽂中,不能出现在URL地址栏内。
也就是说,想要上传⽂件必须提交POST请求。
表单中要有<input type="file" />标签注意:multipart/form-data请求与普通请求不同2、下载⽂件上传jar包并查看官⽅⽂档选择Commons中的FileUpload项⽬,并下载jar包和源⽂件查看FileUpload的⼯作⽅式查看FileUpload项⽬的API3、使⽤第三⽅jar包上传⽂件public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//第⼀步、判断请求是否为multipart请求if(!ServletFileUpload.isMultipartContent(request)) {throw new RuntimeException("当前请求只⽀持⽂件上传");}try {//第⼆步、创建FileItem⼯⼚DiskFileItemFactory factory = new DiskFileItemFactory();//设置临时⽂件存储⽬录String path = this.getServletContext().getRealPath("/Temp");File temp = new File(path);factory.setRepository(temp);//单位:字节。
文件上传和下载总结

文件上传和下载总结文件上传和下载:在java中文件的上传主要有fileupload.jar,cos,mulitpartRequestFile这个控件实现文件上传到服务器。
其实简单的原理就是先上传的项目中,然后上传到服务器上面去。
COS文件的上传首先页面:File.jsp<html><head><title>文件上传</title><link href="css/style.css" rel="stylesheet" type="text/css"> <script src="js/icommon.js"></script><%String path =request.getParameter("path")==null?"":request.getParameter("path"); String filename = "";if(path!=""){filename = path.substring(path.indexOf("/")+1,path.indexOf(".")); }%><script type="text/javascript">function check(){var fileName=document.getElementById("files").value;}</script></head><body><div class="page_title">PDC系统 >上传附件</div><div class="button_bar"><button class="common_button" onclick="alert('欢迎使用')">帮助</button><button class="common_button"onclick="javascript:history.go(-1);">返回</button><input type="reset" value="取消" class="common_button"> </div><form name="form1" method="post" enctype="multipart/form-data"action="upload.jsp"><p><input id="files" name="files" type="file"><input type="submit" name="Submit" value="上传文件"></p></form >Upload.jsp<%@page import="java.io.*"%><%@page import="java.util.*"%><%@page import="com.oreilly.servlet.MultipartRequest"%><%@page contentType="text/html; charset=gb2312" %><%//文件上传后,保存在\\gf_s\\uploadString s1=new File(new File(newFile(application.getRealPath(request.getRequestURI())).getParent()).g etParent()).getParent();String saveDirectory =s1+"\\UploadDemo\\upload";//每个文件最大5m,最多3个文件,所以...int maxPostSize =1 * 5 * 1024 * 1024 ;//response的编码为"gb2312",同时采用缺省的文件名冲突解决策略,实现上传MultipartRequest multi =new MultipartRequest(request, saveDirectory, maxPostSize,"gb2312");//输出反馈信息Enumeration files = multi.getFileNames();while (files.hasMoreElements()) {System.err.println("上传成功");String name = (String)files.nextElement();File f = multi.getFile(name);if(f==null){response.sendRedirect("do.jsp");break;}else{request.getSession().setAttribute("fileName",f.getPath());String fileName = multi.getFilesystemName(name);String lastFileName= "upload/" + fileName;out.println("上传的文件:"+lastFileName);out.println("<hr>");out.println("上传的文件:"+lastFileName);out.println("<script Language=Javascript>alert('上传成功!');</script>");response.sendRedirect("feedback.html?question=updateFile");}}%><meta http-equiv="Content-Type" content="text/html; charset=gb2312">下载:页面:<table class="data_list_table"><tr><th>编号</th><th align="left">附件名</th><th align="left">提交时间</th><th align="left">操作</th></tr><logic:notEmpty name="fileList"><logic:iterate id="reports" name="fileList"><tr><td align="left">${reports.rtManagerId }</td><td align="left">${reports.rtName }</td><td align="left">${reports.rtCreatTime }</td><td width="30%" style="background-color:#eeeeff;"><ahref="feedback.html?question=todown&id=${reports.rtManagerId }">下载</a></td></tr></logic:iterate></logic:notEmpty><logic:empty name="fileList"><tr><td colspan="7" align="center">没有记录</td></tr></logic:empty></table>Action :public ActionForward todown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException{request.setCharacterEncoding("GB2312");int id=0;try{id=Integer.parseInt(request.getParameter("id"));}catch(Exception e){}ReportManager fb=reportManagerBiz.getReportManagerByID(id);Feedback feedback=this.feedbackBiz.getOne(fb.getFeedbackId());String filename=fb.getRtName();if(request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0)filename = new String(filename.getBytes("GB2312"),"ISO8859-1");// firefox浏览器else if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) filename = URLEncoder.encode(filename, "UTF-8");// IE浏览器response.reset();// 如果有换行,对于文本文件没有什么问题,但是对于其它格response.setContentType("application/x-msdownload;charset=GBK");System.out.print(response.getContentType());response.setCharacterEncoding("UTF-8");//乱码问题response.setHeader("Content-Disposition", "attachment;filename=" +new String(filename.getBytes("UTF-8"),"GBK"));// response.setContentType("application/octet-stream");// response.setHeader("Content-Disposition","attachment;filename=\""// + filename + "\"");// response.setHeader("Connection", "close");ServletOutputStream sos = response.getOutputStream();FileInputStream fis = null;File d = new File("D:/"+feedback.getId()+"/"+fb.getRtName()); // File d=new File(fb.getRtPath());try{if (d.exists()){//路径fis = newFileInputStream("D:/"+feedback.getId()+"/"+fb.getRtName());// fis = new FileInputStream(fb.getRtPath());byte b[] = new byte[1000];int j;//读取while ((j = fis.read(b)) != -1){try{//写入sos.write(b, 0, j);}catch (IOException exp) {}}}fis.close();sos.flush();sos.close();}catch (Exception e) {String mailOK="下载失败";request.getSession().setAttribute("mailOK", mailOK);}return null;}。
基于Java文件输入输出流实现文件上传下载功能

基于Java⽂件输⼊输出流实现⽂件上传下载功能本⽂为⼤家分享了Java实现⽂件上传下载功能的具体代码,供⼤家参考,具体内容如下前端通过form表单的enctype属性,将数据传递⽅式修改为⼆进制”流“的形式,服务端(servlet)通过 getInputStream() 获取流信息,运⽤java I/O 流的基础操作将流写⼊到⼀个服务端临时创建的⽂件temp中,然后再次利⽤⽂件基本操作,读取并截取临时⽂件内容,根据其中信息创建相应的⽂件,将读取出来的具体信息写⼊,下载时,根据提交的⽂件名称,找到服务器端相应的⽂件,然后根据输出流outStream输出到页⾯,同时将servlet的响应类型和响应头进⾏设置。
具体传输流程如下图:流信息的部分为:具体代码如下:前端代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script src="Js/jquery.js"></script></head><body><form action="FileUpServlet" method="post" enctype="multipart/form-data"><table><tr><td>请选择上传⽂件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td><td><input type="submit" value="上传"></td></tr><tr><td>${info}</td></tr></table></form>⽂件下载:<a href="FileLoadownServlet?filename=${filename}">${filename}</a></body></html>上传servlet部分(核⼼)@WebServlet("/FileUpServlet")public class FileUpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileUpServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");InputStream filesource = request.getInputStream();//request获取流信息String tempname = "D:/temp";//tempfile代表临时存放⽂件File tempfile = new File(tempname);//创建临时⽂件FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile⽬录下byte b[] = new byte[1024];int n;while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直⾄读完{outputStream.write(b,0,n);}outputStream.close();filesource.close();//关闭输⼊输出流/*以下为具体的⽂件操作,主要为解析临时产⽣的 temp⽂件,知识多为java输⼊输出流的内容!*/RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时⽂件,只读randomfile.readLine();//读取第⼀⾏,⽆效数据,不需要String str = randomfile.readLine();//读取第⼆⾏int beginIndex = stIndexOf("=")+2;//指定所需数据的开始位置int endIndex = stIndexOf("\"");//指定所需数据截⾄位置String filename = str.substring(beginIndex,endIndex);//截取⽂件名//重新定位⽂件指针,获取⽂件内容randomfile.seek(0);//⽂件指针从头开始long startext = 0;int i = 1;//⽂件内容开始位置while((n=randomfile.readByte()) != -1&&i <= 4){if(n=='\n'){startext = randomfile.getFilePointer();i++;}}startext = randomfile.getFilePointer() - 1;//获取⽂件内容结束位置randomfile.seek(randomfile.length());long endtext = randomfile.getFilePointer();int j = 1;while(endtext >= 0 && j <= 2){endtext--;randomfile.seek(endtext);if(randomfile.readByte()=='\n'){j++;}}endtext = endtext-1;//将临时⽂件保存⾄指定⽬录中String realpath = getServletContext().getRealPath("/")+"images";//设置⽂件保存⽬录System.out.println(realpath);File fileupload = new File(realpath);if(!fileupload.exists()){fileupload.mkdir();//⽬录不存在则创建}File savefile = new File(realpath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");randomfile.seek(startext);while(startext<endtext){randomAccessFile.write(randomfile.readByte());//⽂件写⼊startext = randomfile.getFilePointer();}//关闭各种输⼊输出流randomAccessFile.close();randomfile.close();tempfile.delete();//删除临时⽂件SimpleDateFormat timed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date nowdate = new Date();String time = timed.format(nowdate.getTime());request.setAttribute("info", time+" "+filename+"上传成功!");request.setAttribute("filename", filename);request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}下载部分protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubString filename = request.getParameter("filename");String path = getServletContext().getRealPath("/")+"images/";File file = new File(path+filename);//找到⽂件if(file.exists())response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开 InputStream inputStream = new FileInputStream(file);ServletOutputStream outputStream = response.getOutputStream();byte b[] = new byte[1024];int n;while((n = inputStream.read(b)) != -1){outputStream.write(b,0,n);}outputStream.close();inputStream.close();}else{request.setAttribute("result", "⽂件不存在!下载失败!");request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java实现ftp上传下载(jdk1.7以上)

网上有很多关于java实现ftp的上传与下载,但都是jdk1.7以下的,最近在做java实现ftp文件上传与下在,搜到的代码不是jdk1.7一下的,就是apache 的。
将我测试通过的代码与大家共享。
完整代码,复制可用FTP实现代码:package com.pifeng.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetSocketAddress;import .SocketAddress;import .ftp.FtpClient;import .ftp.FtpProtocolException;/**** @author皮锋 java自带的API对FTP的操作**/public class FtpUtil {// FTP客户端private FtpClient ftpClient;/*** 服务器连接** @param ip* 服务器IP* @param port* 服务器端口* @param user* 用户名* @param password* 密码* @param path* 服务器路径*/public void connectServer(String ip, int port, String user, String password, String path) {try {ftpClient = FtpClient.create();try {SocketAddress addr = new InetSocketAddress(ip, port);this.ftpClient.connect(addr);this.ftpClient.login(user,password.toCharArray());System.out.println("login success!");if (path.length() != 0) {// 把远程系统上的目录切换到参数path所指定的目录this.ftpClient.changeDirectory(path);}} catch (FtpProtocolException e) {e.printStackTrace();}} catch (IOException ex) {ex.printStackTrace();throw new RuntimeException(ex);}}/*** 上传文件** @param localFile* 本地文件* @param remoteFile* 远程文件*/public void upload(String localFile, String remoteFile) { //this.localFilename = localFile;//this.remoteFilename = remoteFile;OutputStream os = null;FileInputStream is = null;try {try {// 将远程文件加入输出流中os = this.ftpClient.putFileStream(remoteFile);} catch (FtpProtocolException e) {e.printStackTrace();}// 获取本地文件的输入流File file_in = new File(localFile);is = new FileInputStream(file_in);// 创建一个缓冲区byte[] bytes = new byte[1024];int c;while ((c = is.read(bytes)) != -1) {os.write(bytes, 0, c);}System.out.println("upload success");} catch (IOException ex) {System.out.println("not upload");ex.printStackTrace();throw new RuntimeException(ex);} finally {try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();} finally {try {if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}}/*** 文件下载** @param remoteFile* 远程文件* @param localFile* 本地文件*/public void download(String remoteFile, String localFile) { InputStream is = null;FileOutputStream os = null;try {try {// 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地is = this.ftpClient.getFileStream(remoteFile);} catch (FtpProtocolException e) {e.printStackTrace();}File file_in = new File(localFile);os = new FileOutputStream(file_in);byte[] bytes = new byte[1024];int c;while ((c = is.read(bytes)) != -1) {os.write(bytes, 0, c);}System.out.println("download success");} catch (IOException ex) {System.out.println("not download");ex.printStackTrace();throw new RuntimeException(ex);} finally {try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();} finally {try {if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}}/*** 关闭连接*/public void closeConnect() {try {this.ftpClient.close();System.out.println("disconnect success");} catch (IOException ex) {System.out.println("not disconnect");ex.printStackTrace();throw new RuntimeException(ex);}}}测试代码:package test;import java.text.SimpleDateFormat;import com.pifeng.util.FtpUtil;public class TestFtpUtil {public static void main(String agrs[]) {FtpUtil fu=new FtpUtil();String filepath[] = { "AWC1002972G020-1.dwg", "AWC1002974G020-1.cgm" };String localfilepath[] = { "D:\\AWC1002972G020-1.dwg","D:\\AWC1002974G020-1.cgm" };/* * 使用默认的端口号、用户名、密码以及根目录连接FTP服务器*/fu.connectServer("127.0.0.1", 21, "pifeng", "19920720", "/");// 下载for (int i = 0; i < filepath.length; i++) {fu.download(filepath[i], localfilepath[i]);}String localfile = "D:\\WorkToolKit\\PDF\\ReadMe.htm";String remotefile = "ReadMe.htm";// 上传SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间fu.upload(localfile, remotefile);System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间fu.closeConnect();}}。
JAVA中使用FTPClient实现文件上传下载实例代码

JAVA中使⽤FTPClient实现⽂件上传下载实例代码在java程序开发中,ftp⽤的⽐较多,经常打交道,⽐如说向FTP服务器上传⽂件、下载⽂件,本⽂给⼤家介绍如何利⽤jakarta commons中的FTPClient(在commons-net包中)实现上传下载⽂件。
⼀、上传⽂件原理就不介绍了,⼤家直接看代码吧/*** Description: 向FTP服务器上传⽂件* @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@)创建* @param url FTP服务器hostname* @param port FTP服务器端⼝* @param username FTP登录账号* @param password FTP登录密码* @param path FTP服务器保存⽬录* @param filename 上传到FTP服务器上的⽂件名* @param input 输⼊流* @return 成功返回true,否则返回false*/publicstaticboolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {boolean success = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(url, port);//连接FTP服务器//如果采⽤默认端⼝,可以使⽤ftp.connect(url)的⽅式直接连接FTP服务器ftp.login(username, password);//登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return success;}ftp.changeWorkingDirectory(path);ftp.storeFile(filename, input);input.close();ftp.logout();success = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return success;}<pre></pre>/*** Description: 向FTP服务器上传⽂件* @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@)创建* @param url FTP服务器hostname* @param port FTP服务器端⼝* @param username FTP登录账号* @param password FTP登录密码* @param path FTP服务器保存⽬录* @param filename 上传到FTP服务器上的⽂件名* @param input 输⼊流* @return 成功返回true,否则返回false*/public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {boolean success = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(url, port);//连接FTP服务器//如果采⽤默认端⼝,可以使⽤ftp.connect(url)的⽅式直接连接FTP服务器ftp.login(username, password);//登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return success;}ftp.changeWorkingDirectory(path);ftp.storeFile(filename, input);input.close();ftp.logout();success = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return success;}下⾯我们写两个⼩例⼦:1.将本地⽂件上传到FTP服务器上,代码如下:@Testpublicvoid testUpLoadFromDisk(){try {FileInputStream in=new FileInputStream(new File("D:/test.txt"));boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in); System.out.println(flag);} catch (FileNotFoundException e) {e.printStackTrace();}}<pre></pre>@Testpublic void testUpLoadFromDisk(){try {FileInputStream in=new FileInputStream(new File("D:/test.txt"));boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in); System.out.println(flag);} catch (FileNotFoundException e) {e.printStackTrace();}}2.在FTP服务器上⽣成⼀个⽂件,并将⼀个字符串写⼊到该⽂件中@Testpublicvoid testUpLoadFromString(){try {InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8")); boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input); System.out.println(flag);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}<pre></pre>@Testpublic void testUpLoadFromString(){try {InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8")); boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input); System.out.println(flag);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}⼆、下载⽂件从FTP服务器下载⽂件的代码也很简单,参考如下:/*** Description: 从FTP服务器下载⽂件* @Version. Jul , :: PM by 崔红保(cuihongbao@)创建* @param url FTP服务器hostname* @param port FTP服务器端⼝* @param username FTP登录账号* @param password FTP登录密码* @param remotePath FTP服务器上的相对路径* @param fileName 要下载的⽂件名* @param localPath 下载后保存到本地的路径* @return*/publicstaticboolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) { boolean success = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(url, port);//如果采⽤默认端⼝,可以使⽤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(FTPFile ff:fs){if(ff.getName().equals(fileName)){File localFile = new File(localPath+"/"+ff.getName());OutputStream is = new FileOutputStream(localFile);ftp.retrieveFile(ff.getName(), is);is.close();}}ftp.logout();success = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return success;}<pre></pre>。
java实现文件上传和下载

java实现⽂件上传和下载本⽂实例为⼤家分享了java实现⽂件上传和下载的具体代码,供⼤家参考,具体内容如下⽂件的上传upload:⽂件上传客户端通过表单的⽂件域file 把客户端的⽂件上传保存到服务器的硬盘上页⾯⾸先对上传的表单有以下要求:必须有⽂件域:input type=file表单提交⽅式:method=post表单的 enctype=multipart/form-data<form method="post" action="/user/regist" enctype="multipart/form-data"><table style="border: chartreuse;solid:2px"><tr><th>⽤户名</th><td><input type="text" name="username"></td></tr><tr><th>密码</th><td><input type="password" name="password"></td></tr><tr><th>⽤户头像</th><td><input type="file" name="photo"> </td></tr><tr><td colspan="2"><input type="submit" value="提交"></td></tr></table></form>Servlet1)⾸先要导⼊以下两个jar包,通过commons-fileupload实现⽂件上传2)创建⼀个⼯⼚对象DiskFileItemFactory,在创建⼀个多部件表单解析器ServletFileUpload,构造⽅法传⼊⼯⼚对象3)解析器解析请求对象,获得⼀个list集合,其中list集合存储的是⼀个⼀个的fileItem对象,⼀个fileItem对应⼀个组件,也就是⼀个<input>4) 遍历集合⽤isFormField()⽅法判断是否为普通组件,然后着重处理⽂件域组件5)获取⽂件名,并⽤getRealPath⽅法获取服务器上传⽂件所在路径,创建新⽂件夹6)获取输⼊流和创建输出流,进⾏⽂件的读写@WebServlet(value = "/user/regist")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建⼀个⼯⼚对象DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个多部件解析器对象ServletFileUpload fileUpload = new ServletFileUpload(factory);User user = new User();FileOutputStream out=null;try {//⽤解析器对象解析请求,返回⼀个FileItem类型的集合List<FileItem> list = fileUpload.parseRequest(req);for (FileItem fileItem : list) {/*** fileItem.getFieldName());:::获取组件的name值* fileItem.getName());::::获取⽂件域的⽂件名* fileItem.getSize());::::获取数据的字节个数* fileItem.getString());::::获取数据的字符串* fileItem.isFormField());:::判断是否为普通组件*///判断部件是否为普通组件if (fileItem.isFormField()) {//普通组件//获取组件名字也就是name的值String fieldName = fileItem.getFieldName();//获取组件的值也就是value的值String value = fileItem.getString("utf-8");if ("username".equals(fieldName)) { //设置实体类的属性user.setUsername(value);} else if ("password".equals(fieldName)) {user.setPassword(value);}} else {// ⽂件域//获取⽂件名String fielName = fileItem.getName();//输⼊流来读数据InputStream in = fileItem.getInputStream();//设置⽂件写出的路径,并⽤随机码来保证图⽚可以重复String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);System.out.println("⽂件路径为:"+path);File file = new File(path);out = new FileOutputStream(file);//利⽤commons-io-1.4.jar的IOUtils的copy⽅法直接实现⽂件的复制IOUtils.copy(in,out);user.setPhoto(file.getName());}}} catch (Exception e) {e.printStackTrace();}finally {if(out!=null){out.close();}}req.getSession().setAttribute("user",user);req.getRequestDispatcher("/sucess.jsp").forward(req,resp);}}⽂件的下载页⾯只需⼀个超链接,传需要下载的⽂件名,或者直接输⼊路径在浏览器例: <a href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>Servlet1)接收参数,获取⽂件名2)获取imgs的路径,也就是存储⽂件的⽂件夹的路径,然后创建⽂件,传⼊该路径和⽂件名3)创建输⼊流读取⽂件4)设置响应头,⾸先根据⽂件名字获取⽂件的⼤类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定⽂件以附件形式保存到本地磁盘5)⽤响应获取输出流,读出⽂件到客户端@WebServlet("/user/download")public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//获取要下载的⽂件名String fileName = request.getParameter("fileName");System.out.println(fileName);//获取服务器中存储图⽚的⽂件夹的路径String path1 = request.getServletContext().getRealPath("/imgs");String path=path1+"/"+fileName;File file = new File(path);//创建输⼊流读⽂件FileInputStream in = new FileInputStream(file);//通过⽂件名字获取⽂件的⼤类型String type = request.getServletContext().getMimeType(fileName);//设置响应头ContentType指定响应内容的类型response.setHeader("Content-type",type);//设置响应头Content-Disposition 指定以附件形式保存响应的信息response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8"))); ServletOutputStream out = response.getOutputStream();//实现⽂件的读写IOUtils.copy(in,out);if(in!=null){in.close();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要方法介绍上传// 新建一个SmartUpload对象SmartUpload su = new SmartUpload();// 上传初始化su.initialize(pageContext);// 限制每个上传文件的最大长度。
su.setMaxFileSize(10000);// 限制总上传数据的长度。
su.setTotalMaxFileSize(20000);// 设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
su.setAllowedFilesList("doc,txt");// 设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,//jsp,htm,html扩展名的文件和没有扩展名的文件。
su.setDeniedFilesList("exe,bat,jsp,htm,html,,");// 上传文件su.upload();// 将上传文件全部保存到指定目录int count = su.save("/upload");下载// 新建一个SmartUpload对象SmartUpload su = new SmartUpload();// 初始化su.initialize(pageContext);// 设定contentDisposition为null以禁止浏览器自动打开文件,//保证点击链接后是下载文件。
若不设定,则下载的文件扩展名为//doc时,浏览器将自动用word打开它。
扩展名为pdf时,//浏览器将用acrobat打开。
su.setContentDisposition(null);// 下载文件su.downloadFile("/upload/test.doc");***************************************************************************************************** *****************应用实例:用户只能上传图片格式的文件实例uploadimage.jsp<%@ page contentType="text/html;charset=gb2312" language="java"import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*, com.jspsmart.upload.*,java.util.*"%><%SmartUpload mySmartUpload =new SmartUpload();long file_size_max=4000000;String fileName2="",ext="",testvar="";String url="upload/"; //应保证在根目录中有此目录的存在(也就是说需要自己建立相应的文件夹)//初始化mySmartUpload.initialize(pageContext);//只允许上载此类文件try {mySmartUpload.setAllowedFilesList("jpg,gif");//此处的文件格式可以根据需要自己修改//上载文件mySmartUpload.upload();} catch (Exception e){%><SCRIPT language=javascript>alert("只允许上传.jpg和.gif类型图片文件");window.location='upload.htm';</script><%}try{com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);if (myFile.isMissing()){%><SCRIPT language=javascript>alert("请先选择要上传的文件");window.location='upload.htm';</script><%}else{//String myFileName=myFile.getFileName(); //取得上载的文件的文件名ext= myFile.getFileExt(); //取得后缀名int file_size=myFile.getSize(); //取得文件的大小String saveurl="";if(file_size<file_size_max){//更改文件名,取得当前上传时间的毫秒数值Calendar calendar = Calendar.getInstance();String filename = String.valueOf(calendar.getTimeInMillis());saveurl=application.getRealPath("/")+url;saveurl+=filename+"."+ext; //保存路径myFile.saveAs(saveurl,SmartUpload.SAVE_PHYSICAL);out.print(saveurl);String ret = "parent.HtmlEdit.focus();";ret += "var range = parent.HtmlEdit.document.selection.createRange();" ;ret += "range.pasteHTML('<img src=\"" + request.getContextPath() + "/upload/" + filename + "." + ext + "\">');" ;ret += "alert('上传成功!');";ret += "window.location='upload.htm';";out.print("<script language=javascript>" + ret + "</script>");}}}catch (Exception e){out.print(e.toString());}%>upload.htm<html><head><title>请选择上传的图片</title></head><body><table border="0" align="center" cellpadding="0" cellspacing="0"><tr><td height="45" align="center" valign="middle"><form action="uploadimage.jsp"method="post" enctype="multipart/form-data" name="form1"><input type="file" name="file"><input type="submit" name="Submit" value="上传"></form></td></tr></table></body></html>以上代码可以粘贴直接使用,局部的地方可以根据自己的需要进行修改Upload上传下载全攻略一、安装篇适于嵌入执行上传下载操作的JSP文件中。
该组件有以下几个特点:1、使用简单。
在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载,方便。
2、能全程控制上传。
利用fileUpandDownload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。
3、能对上传的文件在大小、类型等方面做出限制。
如此可以滤掉不符合要求的文件。
4、下载灵活。
仅写两行代码,就能把Web服务器变成文件服务器。
不管文件在Web服务器的目录下或在其它任何目录下,都可以利用fileUpandDownload进行下载。
二、相关类说明篇一File类这个类包装了一个上传文件的所有信息。
通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。
File类主要提供以下方法:1、saveAs作用:将文件换名另存。
原型:public void saveAs(ng.String destFilePathName)或public void saveAs(ng.String destFilePathName, int optionSaveAs)其中,destFilePathName是另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。
SAVEAS_PHYSICAL 表明以操作系统的根目录为文件根目录另存文件,SAVEAS_VIRTUAL表明以Web应用程序的根目录为文件根目录另存文件,SAVEAS_AUTO则表示让组件决定,当Web应用程序的根目录存在另存文件的目录时,它会选择SAVEAS_VIRTUAL,否则会选择SAVEAS_PHYSICAL。
例如,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C 盘,则另存的文件名实际是c:\upload\sample.zip。