精华内容
下载资源
问答
  • Java实现文件上传下载工具类

    千次阅读 2017-10-10 08:52:54
    本篇文章在Eclipse环境下采用Java语言实现文件上传下载工具类。上传时,为避免文件名在服务器中重复,采用“服务器时间(定义到毫秒)+文件名+文件后缀“的方式作为服务器上的文件名;下载过程中利用 spring mvc ...

    本篇文章在Eclipse环境下采用Java语言实现文件上传下载工具类。上传时,为避免文件名在服务器中重复,采用“服务器时间(定义到毫秒)+文件名+文件后缀“的方式作为服务器上的文件名;下载过程中利用 spring mvc ResponseEntity 做文件下载,返回的是字节流,下载成功后可自定义文件的保存路径。具体源码如下所示:

    package com.utils;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    
    /**
     * 文件上传下载工具类
     * 
     */
    public class FileHelper {
    
        /**
         * 根据路径确定目录,没有目录,则创建目录
         * 
         * @param path
         */
        private static void createDir(String path) {
            File fileDir = new File(path);
            if (!fileDir.exists() && !fileDir.isDirectory()) {// 判断/download目录是否存在
                fileDir.mkdir();// 创建目录
            }
        }
    
        /**
         * 将文件名解析成文件的上传路径
         * 
         * @param fileName
         * @return 上传到服务器的文件名
         */
        public static String transPath(String fileName, String path) {
            createDir(path);
            Date date = new Date();
            SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMddhhmmssSSS");// 定义到毫秒
            String nowStr = dateformat.format(date);
            String filenameStr = fileName.substring(0, fileName.lastIndexOf("."));// 去掉后缀的文件名
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);// 后缀
            if (fileName.trim() != "") {// 如果名称不为"",说明该文件存在,否则说明该文件不存在
                path += "\\" + filenameStr + nowStr + "." + suffix;// 定义上传路径
            }
            return path;
        }
    
        /**
         * 提醒文件下载
         * 
         * @param fileName
         * @param path
         * @return
         */
        public static ResponseEntity<byte[]> downloadFile(String fileName, String path) {
            try {
                fileName = new String(fileName.getBytes("GB2312"), "ISO_8859_1");// 避免文件名中文不显示
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
            File file = new File(path);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment", fileName);
    
            ResponseEntity<byte[]> byteArr = null;
            try {
                byteArr = new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return byteArr;
        }
    
        /**
         * 将输入流中的数据写入字节数组
         * 
         * @param in
         * @return
         */
        public static byte[] inputStream2ByteArray(InputStream in, boolean isClose) {
            byte[] byteArray = null;
            try {
                int total = in.available();
                byteArray = new byte[total];
                in.read(byteArray);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (isClose) {
                    try {
                        in.close();
                    } catch (Exception e2) {
                        System.out.println("关闭流失败");
                    }
                }
            }
            return byteArray;
        }
    }
    
    展开全文
  • Java实现文件上传下载功能

    千次阅读 2017-03-12 22:14:53
    1.文件上传原理 在TCP/IP中,最早出现的文件上传机制是FTP。它是将文件由客户端发送到服务器的标准机制。但是在JSP编程过程中不能使用FTP方法来上传文件,这是由JSP的运行机制所决定的。 在JSP中通过为表单元素...

    一、原理介绍

    1.文件上传原理

    	在TCP/IP中,最早出现的文件上传机制是FTP。它是将文件由客户端发送到服务器的标准机制。但是在JSP编程过程中不能使用FTP方法来上传文件,这是由JSP的运行机制所决定的。
    在JSP中通过为表单元素设置Method="post" enctype="multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在接受此请求的Servlet中用二进制流来获取内容,就可以去的文件上传的内容,从而实现文件的上传。
    下面是表单enctype属性:
    Application/x-www-form-urencoded 该属性为默认编码方式,它只处理表单域里面的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
    multipart/form-data 这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域制定文件的内容也封装到请求参数里。
    text/plain 这种方式主要适用与直接通过表单发送邮件的方式。

    2.文件下载原理

    第一步:需要通过HttpServletResponse.setContentType方法设置Content-Type投资端的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,“application/octetstream”或者“application/x-msdownload”等。
    第二步:需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为“attachment;filename = 文件名”
    第三部:读取下载文件,调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容。





    展开全文
  • java实现文件上传下载至ftp服务器

    千次阅读 2017-05-06 23:03:30
    以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白。 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的,比较简单,百度一下就可以找到安装文档。 1.在...

    以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白。
    环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档。
    1.在你的项目目录下建立ftp配置文件,目录如下图

    这里写图片描述

    01 ftpconfig.properties:

    ftpIp=10.73.222.29
    ftpPort=21
    ftpUser=WP
    ftpPwd=04143114wp
    ftpRemotePath=d://share  

    02 读取ftpconfig.properties中的具体内容的类:

     package com.java.core.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    /**
     * @author wangpei
     * @version 创建时间:2017年5月6日 下午9:42:40 读取ftp文件的配置文件
     */
    public class ReadFtpProperties {
        private InputStream is;
        private Properties properties;
    
        public ReadFtpProperties() {
            is = this.getClass().getResourceAsStream("/ftpconfig.properties");// 将配置文件读入输入流中
            properties = new Properties();
            try {
                properties.load(is);
            } catch (IOException e) {
                System.out.println("配置文件不存在..");
                e.printStackTrace();
            } finally {
    
                if (null != is) {
    
                    try {
                        is.close();
                    } catch (IOException e) {
                        System.out.println("关闭流失败..");
                        e.printStackTrace();
                    }
                }
    
            }
    
        }
    
        public String getIp() {// 获取ftp服务器的ip地址
            return properties.getProperty("ftpIp");
    
        }
    
        public String getPort() {// 获取ftp服务器的端口
            return properties.getProperty("ftpPort");
    
        }
    
        public String getUser() {// 获取ftp登录用户名
            return properties.getProperty("ftpUser");
    
        }
    
        public String getPwd() {// 获取ftp服务器的登录密码
            return properties.getProperty("ftpPwd");
    
        }
    
        public String getRemotePath() {// 获取ftp服务器的存放文件的目录
            return properties.getProperty("ftpRemotePath");
    
        }
    
    }
    
    

    03 文件上传下载的接口类

    package com.java.web.service;
    
    import java.io.InputStream;
    import org.apache.commons.net.ftp.FTPClient;
    import com.java.core.util.ReadFtpProperties;
    
    
    /**
     * @author wangpei
     * @version 创建时间:2017年5月6日 下午6:39:03 
     * 文件上传下载业务逻辑接口层
     */
    public interface FtpService {
        /*
         * 登录至FTP
         */
        public boolean loginFTP(FTPClient client, ReadFtpProperties rfp);
    
        /*
         * 退出ftp
         */
        public boolean logout(FTPClient  client);//
    
        /*
         * 上传文件到remotePath,其在ftp上的名字为inputStream
         */
        public boolean uploadFile(FTPClient client, String remotePath,
                String fileNewName, InputStream inputStream, ReadFtpProperties rfp);
    
        /*
         * 从目录remotePath,下载文件fileName
         */
        public InputStream downFileByFtp(FTPClient client, String remotePath,
                String fileName);
    
        /*
         * 删除ftp上的目录为pathName的文件
         */
        public boolean delFile(FTPClient client, String pathName);
    
    }
    

    04 文件上传下载的接口实现类

    package com.java.web.service.serviceImpl;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.SocketException;
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import com.java.core.util.ReadFtpProperties;
    import com.java.web.service.FtpService;
    
    /**
     * @author wangpei
     * @version 创建时间:2017年5月6日 下午10:02:28 类说明
     */
    public class FtpServiceImpl implements FtpService {
    
        public boolean loginFTP(FTPClient client, ReadFtpProperties rfp) {
            String ftpIp = rfp.getIp();
            String ftpPort = rfp.getPort();
            String ftpUser = rfp.getUser();
            String ftpPwd = rfp.getPwd();
            // String fgtpRemotePath = rfp.getRemotePath();
            boolean b = false;
    
            try {
                client.connect(ftpIp, Integer.parseInt(ftpPort));
            } catch (NumberFormatException e) {
                System.out.println("无法连接到ftp");
                return false;
            } catch (SocketException e) {
                System.out.println("无法连接到ftp");
                return false;
            } catch (IOException e) {
                System.out.println("无法连接到ftp");
                return false;
            }
            client.setControlEncoding("uft-8");
            try {
                b = client.login(ftpUser, ftpPwd);
            } catch (IOException e) {
                System.out.println("登录ftp出错");
                logout(client);// 退出/断开FTP服务器链接
                return false;
            }
            return b;
    
        }
    
        public boolean logout(FTPClient client) {
            boolean b = false;
    
            try {
                b = client.logout();// 退出登录
                client.disconnect();// 断开连接
            } catch (IOException e) {
                return false;
            }
            return b;
    
        }
    
        public boolean uploadFile(FTPClient client, String remotePath,
                String fileNewName, InputStream inputStream, ReadFtpProperties rfp) {
            boolean b = false;
            try {
                client.setFileType(FTPClient.BINARY_FILE_TYPE);
                client.enterLocalPassiveMode();
                if (remotePath != null && !"".equals(remotePath.trim())) {
                    String[] pathes = remotePath.split("/");
                    for (String onepath : pathes) {
                        if (onepath == null || "".equals(onepath.trim())) {
                            continue;
                        }
    
                        onepath = new String(onepath.getBytes("utf-8"),
                                "iso-8859-1");
                        System.out.println("onepath=" + onepath);
                        if (!client.changeWorkingDirectory(onepath)) {
                            client.makeDirectory(onepath);// 创建FTP服务器目录
                            client.changeWorkingDirectory(onepath);// 改变FTP服务器目录
                        } else {
                            System.out.println("文件单路径");
                        }
                    }
                }
                b = client.storeFile(new String(fileNewName.getBytes("utf-8"),
                        "iso-8859-1"), inputStream);
            } catch (UnsupportedEncodingException e) {
                return false;
            } catch (IOException e) {
                return false;
            }
            return b;
        }
    
        public InputStream downFileByFtp(FTPClient ftpClient, String remotePath,
                String fileName) {
    
            FTPFile[] fs;
            InputStream is = null;
            try {
                // 设置被动模式
                ftpClient.enterLocalPassiveMode();
                // 设置以二进制流的方式传输
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                // 设置编辑格式
                ftpClient.setControlEncoding("utf-8");
    
                remotePath = remotePath.substring(0,
                        remotePath.lastIndexOf(fileName));
                fs = ftpClient.listFiles(remotePath);// 递归目标目录
                for (FTPFile ff : fs) {
                    if (ff.getName().equals(fileName)) {// 查找目标文件
                        is = ftpClient.retrieveFileStream(new String(
                                (remotePath + fileName).getBytes("utf-8"),
                                "iso-8859-1"));
                        break;
                    }
                }
    
            } catch (IOException e) {
    
                e.printStackTrace();
            }
            return is;
    
        }
    
        public boolean delFile(FTPClient ftpClient, String pathName) {
            boolean b = false;
    
            try {
                b = ftpClient.deleteFile(pathName);
    
                return b;
            } catch (Exception e) {
                return false;
            } finally {
                logout(ftpClient);// 退出/断开FTP服务器链接
            }
    
        }
    
    }
    

    代码很好理解,看一遍应该就可以理解,在这儿就不具体分析了,主要看代码中的注释。

    展开全文
  • java实现文件上传下载的三种方法

    万次阅读 2016-08-05 13:31:13
    一、文件上传下载原理 在TCP/IP中,最早出现的文件上传机制是FTP。它是将文件由客户端发送到服务器的标准机制。但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp的运行机制所决定的。 通过为表单元素设置Method...

    JSP+Servlet

    一、文件上传下载原理

    在TCP/IP中,最早出现的文件上传机制是FTP。它是将文件由客户端发送到服务器的标准机制。但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp的运行机制所决定的。

    通过为表单元素设置Method=“post” enctype="multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。

    二、enctype属性的选择值范围

    1、application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成url编码方式。

    2、multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定的文件内容也封装到请求参数里。

    3、text/plain:这种方式主要适用于直接通过表单发送邮件的方式。

    代码内容

    1.将文件读取到服务器指定目录下

    2.获取文件内容的起止位置,和文件名称

    3.将文件保存到项目的指定目录下

    <span style="font-size:18px;">public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//从request中获取输入流信息
    		InputStream fileSource = request.getInputStream();
    		//创建存储在服务器的路径信息
    		String tempFileName = "H:/tempFile";
    		//指向临时文件
    		File tempFile = new File(tempFileName);
    		//outPutStream输出流指向临时文件
    		FileOutputStream outputStream = new FileOutputStream(tempFile); 
    		//每次读取文件字节
    		byte b[] = new byte[1024];
    		int n;
    		while((n=fileSource.read(b))!=-1){
    			outputStream.write(b,0,n);
    		}
    		
    		//关闭输出输入流
    		fileSource.close();
    		outputStream.close();
    		
    		//获取上传文件的名称
    		RandomAccessFile randomFile = new RandomAccessFile(tempFile, "r");
    		randomFile.readLine();  //获取第一行数据(对我们来说没有意义)
    		String str = randomFile.readLine();  //获取第二行数据,内容为:Content-Disposition: form-data; name="myfile"; filename="C:\Users\lihf\Desktop\hello.txt"
    		int beginIndex = str.lastIndexOf("\\")+1;
    		int endIndex = str.lastIndexOf("\"");
    		String fileName = str.substring(beginIndex, endIndex);
    		
    		//重新定位文件指针到头文件
    		randomFile.seek(0);
    		long startPosition=0;
    		int i=1;
    		//获取文件内容开始位置
    		while((n=randomFile.readByte())!=-1&&i<=4){
    			if(n=='\n'){
    				startPosition = randomFile.getFilePointer();
    				i++;
    			}
    		}
    		startPosition = randomFile.getFilePointer() -1;
    		//获取文件结束位置
    		randomFile.seek(randomFile.length());  //文件指针定位到文件末尾
    		long endPosition = randomFile.getFilePointer();
    		int j=1;
    		while(endPosition>=0&&j<=2){
    			endPosition--;
    			randomFile.seek(endPosition);
    			if(randomFile.readByte()=='\n'){
    				j++;
    			}
    		}
    		endPosition = endPosition -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(startPosition);
    		while(startPosition<endPosition){
    			randomAccessFile.write(randomFile.readByte());
    			startPosition = randomFile.getFilePointer();
    		}
    		
    		//关闭输入输出流
    		randomAccessFile.close();
    		randomFile.close();
    		tempFile.delete();
    		 	
    		request.setAttribute("result", "上传成功!");
    		RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/01.jsp");
    		dispatcher.forward(request, response);
    	}</span>

    三、文件下载原理

    1、step1:需要通过HttpServletResponse.setContentType方法设置Content-type头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,“application/octet-stream”或“application/x-msdownload”等。

    2、step2:需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为“attachment;filename=文件名”。

    3、step3:读取下载文件,调用HttpServletResponse.getOutputStream方法返回的OutputStream对象来向客户端写入附件文件内容。

    <span style="font-size:18px;">public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//获取文件下载路径
    		String path = getServletContext().getRealPath("/") + "images/";
    		String filename = request.getParameter("filename");
    		File file = new File(path + filename);
    		if(file.exists()){
    			//设置相应类型application/octet-stream
    			response.setContentType("application/x-msdownload");
    			//设置头信息
    			response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
    			InputStream inputStream = new FileInputStream(file);
    			ServletOutputStream ouputStream = response.getOutputStream();
    			byte b[] = new byte[1024];
    			int n ;
    			while((n = inputStream.read(b)) != -1){
    				ouputStream.write(b,0,n);
    			}
    			//关闭流、释放资源
    			ouputStream.close();
    			inputStream.close();
    		}else{
    			request.setAttribute("errorResult", "文件不存在下载失败!");
    			RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/01.jsp");
    			dispatcher.forward(request, response);
    		}
    	}</span>
    JSP页面内容:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP '01.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<link rel="stylesheet" type="text/css" href="css/common.css" />
    	<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
    	<script type="text/javascript">
    		$(function(){
    			$(".thumbs a").click(function(){
    				var largePath=$(this).attr("href");
    				var largeAlt=$(this).attr("title");
    				$("#largeImg").attr({
    					src:largePath,
    					alt:largeAlt
    				});
    				return false;
    			});
    			$("#myfile").change(function(){
    				$("previewImg").attr("src","file:///"+$("#myfile").val());
    			});
    			
    			var la = $("#large");
    			la.hide();
    			
    			$("#previewImg").mousemove(function(e){
    				la.css({
    					top:e.pagey,
    					left:e.pagex
    				}).html('<img src="'+this.src+'" />');
    			}).mouseout(function(){
    				la.hide();
    			});
    			
    		});
    		/* function showPreview(obj){
    			var str = obj.value;
    			document.getElementById("previewImg").innerHTML=
    				"<img src='"+str+"'/>";
    				alert(document.getElementById("previewImg").innerHTML);
    		} */
    	</script>
      </head>
      
      <body>
      	<img id="previewImg" src="images/preview.jpg" width="80" height="80" />
      <form action="uploadServlet.do" method="post" enctype="multipart/form-data">
      	请选择上传图片:<input type="file" id="myfile" name="myfile" οnchange="showPreview(this)" />
      	<input type="submit" value="提交"/>
      </form>
      下载<a href="downloadServlet.do?filename=hello.txt">hello.txt</a>   ${errorResult}
      <div id="large"></div>
      <!-- <form action="">
      	请选择上传图片:<input type="file" id="myfile" name="myfile" οnchange="showPreview(this)" />
      	<div id="previewImg"></div>
      </form> -->
       <hr>
       <h2>图片预览</h2>
        <p><img id="largeImg" src="images/img1-lg.jpg" alt="Large Image"/></p>
        <p class="thumbs">
        	<a href="images/img2-lg.jpg" title="Image2"><img src="images/img2-thumb.jpg"></a>
        	<a href="images/img3-lg.jpg" title="Image3"><img src="images/img3-thumb.jpg"></a>
        	<a href="images/img4-lg.jpg" title="Image4"><img src="images/img4-thumb.jpg"></a>
        	<a href="images/img5-lg.jpg" title="Image5"><img src="images/img5-thumb.jpg"></a>
        	<a href="images/img6-lg.jpg" title="Image6"><img src="images/img6-thumb.jpg"></a>
        </p>
      </body>
    </html>
    SmartUpload实现上传下载

    使用非常简单,直接引入SmartUpload的jar文件就可以啦

    <span style="font-size:18px;">public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//设置上传文件保存路径
    		String filePath = getServletContext().getRealPath("/")+"images";
    		File file = new File(filePath);
    		if(!file.exists()){
    			file.mkdir();
    		}
    		SmartUpload su = new SmartUpload();
    		//初始化smartUpload
    		su.initialize(getServletConfig(), request, response);
    		//设置上传文件大小
    		su.setMaxFileSize(1024*1024*10);
    		//设置所有文件的大小
    		su.setTotalMaxFileSize(102481024*100);
    		//设置允许上传文件的类型
    		su.setAllowedFilesList("txt,jpg,gif");
    		String result = "上传能成功";
    		try {
    			//设置禁止上传文件类型
    			su.setDeniedFilesList("jsp,rar");
    			su.upload();
    			int count = su.save(filePath);
    			System.out.println("上传成功"+count+"文件!");
    		} catch (Exception e) {
    			result="上传文件失败!";
    <span style="white-space:pre">			</span>if(e.getMessage().indexOf("1015")!=-1){<span style="white-space:pre">				</span>
    <span style="white-space:pre">				</span>result = "上传文件失败:上传文件类型不正确!";
    <span style="white-space:pre">			</span>}else if(e.getMessage().indexOf("1010")!=-1){
    <span style="white-space:pre">				</span>result = "上传文件失败:上传文件类型不正确!";
    <span style="white-space:pre">			</span>}else if(e.getMessage().indexOf("1105")!=-1){
    <span style="white-space:pre">				</span>result = "上传文件失败:上传文件大小大于允许上传的最大值!";
    <span style="white-space:pre">			</span>}else if(e.getMessage().indexOf("1110")!=-1){
    <span style="white-space:pre">				</span>result = "上传文件失败:上传文件的总大小大于我们允许上传总大小的最大值!";
    <span style="white-space:pre">			</span>}
    <span style="white-space:pre">			</span>e.printStackTrace();
    		}
    		for(int i=0;i<su.getFiles().getCount();i++){
    <span style="white-space:pre">			</span>com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
    <span style="white-space:pre">			</span>System.out.println("表单当中name属性值:"+tempFile.getFieldName());
    <span style="white-space:pre">			</span>System.out.println("上传文件名:"+tempFile.getFileName());
    <span style="white-space:pre">			</span>System.out.println("上传文件的大小:"+tempFile.getSize());
    <span style="white-space:pre">			</span>System.out.println("上传文件名拓展名:"+tempFile.getFileExt());
    <span style="white-space:pre">			</span>System.out.println("上传文件的全名:"+tempFile.getFilePathName());
    <span style="white-space:pre">		</span>}
    		request.setAttribute("result",result);
    		request.getRequestDispatcher("jsp/02.jsp").forward(request, response);
    	}</span>
    jsp页面表单提交内容:
    <span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP '02.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<link rel="stylesheet" type="text/css" href="css/common.css" />
    	<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
    	<script type="text/javascript">
    		$(function(){
    			$(".thumbs a").click(function(){
    				var largePath=$(this).attr("href");
    				var largeAlt=$(this).attr("title");
    				$("#largeImg").attr({
    					src:largePath,
    					alt:largeAlt
    				});
    				return false;
    			});
    		});
    	</script>
      </head>
      <body>
      	<form action="smartUploadServlet.do" method="post" enctype="multipart/form-data">
      		上传文件1:<input type="file" name="myfile1"/><br>
      		上传文件2:<input type="file" name="myfile2"/><br>
      		上传文件3:<input type="file" name="myfile3"/><br>
      		<input type="submit" value="提交"> ${result}
      	</form>
       <hr></span>
    <span style="font-size:18px;">  下载:<a href="smartDownloadServlet.do?filename=img5-lg.jpg">img5-lg.jpg</a>
       <hr>
       <h2>图片预览</h2>
        <p><img id="largeImg" src="images/img1-lg.jpg" alt="Large Image"/></p>
        <p class="thumbs">
        	<a href="images/img2-lg.jpg" title="Image2"><img src="images/img2-thumb.jpg"></a>
        	<a href="images/img3-lg.jpg" title="Image3"><img src="images/img3-thumb.jpg"></a>
        	<a href="images/img4-lg.jpg" title="Image4"><img src="images/img4-thumb.jpg"></a>
        	<a href="images/img5-lg.jpg" title="Image5"><img src="images/img5-thumb.jpg"></a>
        	<a href="images/img6-lg.jpg" title="Image6"><img src="images/img6-thumb.jpg"></a>
        </p>
      </body>
    </html></span>
    <span style="font-size:18px;"><span style="background-color: rgb(255, 255, 255);">下载部分的代码</span></span>

    <span style="font-size:18px;">public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		String filename = request.getParameter("filename");
    		SmartUpload su = new SmartUpload();
    		su.initialize(getServletConfig(), request, response);
    		su.setContentDisposition(null);
    		try {
    			su.downloadFile("/images/"+filename);
    		} catch (SmartUploadException e) {
    			e.printStackTrace();
    		}
    	}</span>

    Struts2实现上传下载:

    上传jsp页面代码:

    <span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP '03.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<link rel="stylesheet" type="text/css" href="css/common.css" />
    	<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
    	<script type="text/javascript">
    		$(function(){
    			$(".thumbs a").click(function(){
    				var largePath=$(this).attr("href");
    				var largeAlt=$(this).attr("title");
    				$("#largeImg").attr({
    					src:largePath,
    					alt:largeAlt
    				});
    				return false;
    			});
    		});
    	</script>
      </head>
      <body>
      	<h2> 文件上传</h2>
      	<form action="upload.action" method="post" enctype="multipart/form-data">
      		上传文件1:<input type="file" name="upload"/><br>
      		上传文件2:<input type="file" name="upload"/><br>
      		上传文件3:<input type="file" name="upload"/><br>
      		<input type="submit" value="提交"> ${result}
      	</form>
       <hr>
       <h2>图片预览</h2>
        <p><img id="largeImg" src="images/img1-lg.jpg" alt="Large Image"/></p>
        <p class="thumbs">
        	<a href="images/img2-lg.jpg" title="Image2"><img src="images/img2-thumb.jpg"></a>
        	<a href="images/img3-lg.jpg" title="Image3"><img src="images/img3-thumb.jpg"></a>
        	<a href="images/img4-lg.jpg" title="Image4"><img src="images/img4-thumb.jpg"></a>
        	<a href="images/img5-lg.jpg" title="Image5"><img src="images/img5-thumb.jpg"></a>
        	<a href="images/img6-lg.jpg" title="Image6"><img src="images/img6-thumb.jpg"></a>
        </p>
      </body>
    </html></span>
    struts.xml部分代码

    <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
        <!-- 国际化 -->
    	<constant name="struts.custom.i18n.resources" value="app"></constant>
        <package name="default" namespace="/" extends="struts-default">
    			<action name="upload" class="com.lihf.action.FileUploadAction">
    					<result>/jsp/03.jsp</result>
    					<result name="input">/jsp/error.jsp</result>
    					<!-- 配置拦截器限制上传文件类型及大小 -->
    					<interceptor-ref name="fileUpload">
    						<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/pjpeg</param>
    						<param name="maximumSize">2M</param>
    					</interceptor-ref>
    					<interceptor-ref name="defaultStack"></interceptor-ref>
    			</action>
    			<action name="download" class="com.lihf.action.DownLoadAction">
    				<param name="inputPath">/images/img2-lg.jpg</param>
    				<result name="success" type="stream">
    					<param name="contentType">application/octet-stream</param>
    					<param name="inputName">inputStream</param>
    					<!-- 以附件的形式下载 -->
    					<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
    					<param name="bufferSize">8192</param>
    				</result>
    			</action>
        </package>
    </struts></span>
    web.xml部分代码

    <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>scxz</display-name>
      <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.lihf.servlet.UploadServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>com.lihf.servlet.DownloadServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>SmartUploadServlet</servlet-name>
        <servlet-class>com.lihf.servlet.SmartUploadServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>SmartDownloadServlet</servlet-name>
        <servlet-class>com.lihf.servlet.SmartDownloadServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/uploadServlet.do</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/downloadServlet.do</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>SmartUploadServlet</servlet-name>
        <url-pattern>/smartUploadServlet.do</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>SmartDownloadServlet</servlet-name>
        <url-pattern>/smartDownloadServlet.do</url-pattern>
      </servlet-mapping>
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</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></span>
    action方法:

    <span style="font-size:18px;">package com.lihf.action;
    
    import java.io.File;
    import java.util.List;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUploadAction extends ActionSupport {
    
    	private List<File> upload;
    	private List<String> uploadContentType;
    	private List<String> uploadFileName;
    	private String result;
    	public List<File> getUpload() {
    		return upload;
    	}
    	public void setUpload(List<File> upload) {
    		this.upload = upload;
    	}
    	public List<String> getUploadContentType() {
    		return uploadContentType;
    	}
    	public void setUploadContentType(List<String> uploadContentType) {
    		this.uploadContentType = uploadContentType;
    	}
    	public List<String> getUploadFileName() {
    		return uploadFileName;
    	}
    	public void setUploadFileName(List<String> uploadFileName) {
    		this.uploadFileName = uploadFileName;
    	}
    	public String getResult() {
    		return result;
    	}
    	public void setResult(String result) {
    		this.result = result;
    	}
    	@Override
    	public String execute() throws Exception {
    		String path = ServletActionContext.getServletContext().getRealPath("/images");
    		File file = new File(path);
    		if(!file.exists()){
    			file.mkdir();
    		}
    		for(int i=0;i<upload.size();i++){			
    			FileUtils.copyFile(upload.get(i), new File(file,uploadFileName.get(i)));
    		}
    		result ="上传成功!";
    		return SUCCESS;
    	}
    
    }
    </span>
    下载:

    action方法:

    <span style="font-size:18px;">package com.lihf.action;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DownLoadAction extends ActionSupport {
    	public String inputPath;
    	public String fileName;
    	public String getFileName() {
    		return fileName;
    	}
    	public void setFileName(String fileName) {
    		this.fileName = fileName;
    	}
    	public String getInputPath() {
    		return inputPath;
    	}
    	public void setInputPath(String inputPath) {
    		this.inputPath = inputPath;
    	}
    	@Override
    	public String execute() throws Exception {
    		return SUCCESS;
    	}
    	public InputStream getInputStream() throws IOException{
    		String path = ServletActionContext.getServletContext().getRealPath("/images");
    		String filePath = path+"\\"+fileName;
    		File file = new File(filePath);
    		return FileUtils.openInputStream(file);
    		//根据文件路径获取流信息固定下载文件使用方法
    		//return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    	}
    	public String getDownloadFileName(){
    		//如果是中文的文件名称需要转码
    		String downloadFileName = "";
    		try {
    			downloadFileName = URLEncoder.encode("文件下载.jpg","UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return downloadFileName;
    	}
    }
    </span>
    jsp页面:

    <a href="download.action?fileName=img3-lg.jpg">文件下载(图片)</a>













    展开全文
  • java实现文件上传下载

    万次阅读 2015-08-08 13:59:19
    JAVA文件上传下载知识点整理, 东风化宇,文件上传 一、对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦。 JSP...
  • java实现文件上传下载

    万次阅读 2019-05-21 07:48:36
    java实现文件上传下载 本文是基于Windows 10系统环境,实现文件的上传下载: Windows 10 MyEclipse 10 一、文件上传 (1) 文件上传的条件 提交方式:post 表单中有文件上传的表单项: input type="file" ...
  • java文件实现文件上传下载

    万次阅读 多人点赞 2019-06-10 10:46:20
     文件上传下载java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到本地。...
  • java实现文件上传oss服务

    千次阅读 2019-02-27 11:42:59
    java实现文件上传oss服务 首先是pom.xml引入对应的jar包 &lt;!-- OSS文件上传 start --&gt; &lt;dependency&gt; &lt;groupId&gt;commons-httpclient&lt;/groupId&gt; &lt...
  • Java 文件上传下载 本地磁盘
  • 1、文件上传 package com.myproject.aiplatform.core.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j...
  • Java通过SSH实现文件上传下载功能

    千次阅读 2019-02-23 20:30:00
    上周接到一个文件上传下载的需求,具体如下: 项目说明: 1.本项目采用ssh方式,实现文件的上传与下载功能; windows连接远程服务有多种方式,网上有通过socket实现的;也有ftp方式连接和ssh方式。调研后,我...
  • Java 实现Ftp上传下载文件

    万次阅读 2018-04-23 10:12:07
    最近项目中需要实现文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘。...
  • java代码中实现文件上传下载,通过页面的file文件上传java代码段,获取文件的大小和名字
  • Java实现文件上传

    万次阅读 2017-05-19 13:47:07
    Java实现将本地文件上传到服务器并保存实现文件上传需要用的的jar包:commons-fileupload 和 commons-io1.将form表单的 enctype 设置为:multipart/form-data , method 设置为 post , 使用类型为 file 的input上传...
  • java实现Excel上传下载

    2018-03-12 12:10:46
    java实现Excel上传下载 需要poi对应jar包下载地址 点我下载 http://download.csdn.net/download/weixin_39549656/10161349 项目demo包含poi下载地址,点我下载 生成简单的Excel public class 生成简单的...
  • Java 实现ftp上传下载文件

    千次阅读 2017-07-19 17:02:45
    jar包:commons-net-ftp-2.0.jar ... import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; impor
  • JAVA实现FTP文件上传下载

    千次阅读 2019-01-17 21:41:24
    JAVA实现FTP文件上传下载 首先在pom文件中添加FTP相关Jar坐标: &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;groupId&amp;amp;amp;gt;commons-net&amp;amp;amp;lt;...
  • SpringMVC整合fastdfs-client-java实现web文件上传下载

    万次阅读 多人点赞 2016-10-04 17:19:35
    关于SpringMVC整合FastDFS的java客户端fastdfs-client-java实现web中的文件上传下载
  • Java FTP 实现跨服务器文件上传下载

    热门讨论 2013-11-19 13:44:01
    Java 程序实现的 FTP 跨服务器文件上传下载功能。
  • java实现文件上传java实现文件下载java实现文件删除:
  • Java通过SSH实现文件上传下载功能实现 实现的主要功能: 1.上传 压缩对应的文件夹,生成临时文件.zip----&gt;上传临时文件.zip,上传成功,删除本地临时文件 ----&gt; 远程服务上解压到服务器指定路径,并...
  • 1.首先,程序中设置ftp请求方式为被动模式,即程序去请求ftp服务器,要求服务器来打开一个端口,让客户端传输文件。这是基本的,但是无法避免上传阻塞问题。...4.最后,我在程序中加入了上传下载listener(ftpcl
  • java web项目实现文件上传和文件下载功能 2019-07-04 你源 今天来讲一下java web文件上传和文件下载,文件上传有很多种方式。现将这些方式分享给大家。还是全力以赴每一天[韬光养晦 厚积薄发]~~~~ 文件下载 //文件...
  • JAVA中使用FTPClient实现文件上传下载

    千次阅读 2016-04-06 09:06:24
    JAVA程序中,经常需要和FTP打交道,比如向FTP...commons-net包中)实现上传下载文件。 一、上传文件  原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul
  • Java实现ftp文件上传下载和删除

    万次阅读 2019-05-30 16:41:05
    本文利用apache ftp工具实现文件上传下载和删除。具体如下: 1、下载相应的jar包: commons-net-1.4.1.jar 2、实现代码如下: public class FtpUtils { //ftp服务器地址 public String hostname = "192....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 223,633
精华内容 89,453
关键字:

java实现文件上传下载

java 订阅