`

文件上传下载

阅读更多

java中文件上传与下载

1。上传文件流程

先通过用户提交文件,保存文件到服务器端,然后在写入数据库中,每次到下载页面时从数据库中读出文件,生成文件在服务器目录中,以下。。。

 

文件上传后保存文件到服务器中jsp,

upFile.jsp

<%@ page contentType="text/html; charset=utf-8" language="java" %>
< import="java.util.List;"%>

<html>
<head>
<title>上传文件</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<base target="_self">
<link href="Css/style.css" rel="stylesheet">
<script type="text/javascript">
    function check(){
        var file = document.getElementById("file1").value;
        if(file == ""){
          alert('请选择要上传的文件');
          return false;
         }else{
          window.returnValue=file;
          return true;
         }
       }
</script>
</head>
<body>
<%
String files=request.getParameter("files");
%>
<form name="form2" enctype="multipart/form-data" method="post" action="../MissionManage/commonfile.jsp?files=<%=files %>" onsubmit="return check();">
<center>
<table align="center" width="350" height="150" border="0" cellpadding="0" cellspacing="0"><!-- background="images/upFile_bg.gif -->
    <tr>
      <td valign="top"><table width="100%" height="145" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td height="49" colspan="2">&nbsp;</td>
        </tr>
        <tr>
          <td width="9%" height="53">&nbsp;</td>
          <td width="91%"><b>请选择上传的文件:</b><br>
            <input id="file1" name="file1" type="file" size="35" onkeydown="return false;">
            <br>
            注:文件大小请控制在10M以内。</td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input name="Submit" type="submit" class="btn_grey" value="确认">
            &nbsp;
            <input name="Submit2" type="button" class="btn_grey" onClick="window.close()" value="关闭"></td>
        </tr>
      </table></td>
    </tr>
</table>
</center>
</form>
</body>
</html>

commonfile.jsp

<%@ page language="java" import="java.io.*" pageEncoding="UTF-8"%>
< import="java.util.*,org.apache.commons.fileupload.FileItem" %>
< import="java.text.SimpleDateFormat,java.util.Date" %>
< import="com.PoliceSystem.tools.FileOperate" %>
<jsp:useBean id="factory" scope="page" class="org.apache.commons.fileupload.disk.DiskFileItemFactory" />
<jsp:useBean id="upload" scope="page" class="org.apache.commons.fileupload.servlet.ServletFileUpload" />
<%
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>上传文件</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">
<base target="_self">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" language="javascript">

    </script>
</head>

<body>
   <% 
     request.setCharacterEncoding("UTF-8"); 
     String path1 = (String)request.getRealPath("/upload1");
     
     String files=request.getParameter("files");
     String[] fileList=files.split(";");
     
     File file = new File(path1); 
   
if(!file.exists()){ 
     file.mkdirs(); 

     factory.setRepository(file); 
     factory.setSizeThreshold(1024*1024); 
     
     upload.setFileItemFactory(factory);
        
     try{ 
     List<FileItem> list= upload.parseRequest(request); 

        for(FileItem item:list){ 
      if(item.isFormField()){ 
        //String value=item.getString("UTF-8"); 
        //session.setAttribute("fileName", value);        
      }else{ 
        String value=item.getName(); 
        int start=value.lastIndexOf("\\"); 
        String fileName=value.substring(start+1); 
        if(fileName.length() == 0 || fileName == ""){ 
            out.println("<script>alert('上传失败');window.close();</script>"); 
        }else{        
         if(item.getSize()>10000000){
           out.println("<script>alert('对不起,您上传的文件超过10M,无法完成上传!');window.close();</script>"); 
         }else{
           SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 
              Date date =new Date();
              String[] f = item.getName().split("\\\\");
              //System.out.println(f[f.length-1]);
              String oldFileName = f[f.length-1];
              for(int i=0;i<fileList.length;i++){
              if(fileList[i].indexOf(oldFileName)!=-1){
                 out.println("<script>alert('对不起,您上传的文件与现有上传的文件重名,请更换文件名重新上传!');window.returnValue='';window.close();</script>");
              }
              }
              String fType = FileOperate.getFileType(item.getName());//文件类型
           fileName = sdf.format(date)+"."+fType;//新文件名
           //System.out.println(item.getName()+"---"+fileName);
           item.write(new java.io.File(path1,fileName));
           //////--1--/////
           String mailFileNames = new String();
           String old = (String)session.getAttribute("fuJianFileNames");
        if(old!=null){
          mailFileNames = old;
        }
        mailFileNames+=oldFileName+"|"+fileName+";"; 
        //System.out.println("mailFileNames="+mailFileNames);    
        session.removeAttribute("fuJianFileNames");
        session.setAttribute("fuJianFileNames", mailFileNames); 
           //////--2--/////
           //String pathName = path1+";
           //System.out.println("pathName="+pathName);           
           out.println("<script>window.close();</script>"); 
         }
        }        
      }
        }
    }catch (Exception e) {
       e.printStackTrace();
       out.println("<script>window.close();</script>");
    }
   %>
</body>
</html>

 

插入文件数据到数据库中

public boolean insert_annex(String[] str){
   boolean b=true;
   String sql ="";
   con = db.getConn();
   try{
    sql="insert into annex (querykey,sfilename,committime,Filetype,filepath,pno,Annex) values (?,?,?,?,?,?,?)";
    ps = con.prepareStatement(sql);
    for(int i=0;i<str.length-1;i++){
     ps.setString(i+1, str[i]);
    }
    File file = new File(str[6]);//附件
   
    InputStream iso = new FileInputStream(file);
    ps.setBinaryStream(7, iso, iso.available());
    ps.execute();
    iso.close();
    System.out.println("删除临时文件:" + file.delete());// 删除tmp文件
   }catch(Exception e){
    b=false;
    e.printStackTrace();
   }finally{
    this.close();
   }
   return b;
}

读出文件数据,并保存

public boolean addTempFile_annex(String querykey,HttpServletRequest request){
   boolean b=true;
   con = db.getConn();
   InputStream in = null;
   OutputStream out= null;  
   String path1 = (String)request.getRealPath("/upload1");//文件下载临时目录
   try{
    String sql="select filePath,annex from annex where querykey='"+querykey+"'";
    //String sql_1="select annex from annex where querykey='"+querykey+"'";
   
    ps = con.prepareStatement(sql);
    rs=ps.executeQuery();
    while(rs.next()){
     File f = new File(path1+rs.getString("filepath"));
     in=rs.getBinaryStream("annex");
     out = new FileOutputStream(f);
     int len = 10 * 100 * 100; //定义字符数组长度
     byte[] P_Buf=new byte[len];
     int j;
       while((j=in.read(P_Buf))!=-1){
          out.write(P_Buf, 0, j);
          }
    }
    in.close();
            out.flush(); //强制清出缓冲区
            out.close();
   }catch(Exception e){
    b=false;
    e.printStackTrace();
   }finally{
    this.close();
   }
   return b;
}

给定传递过来的参数(文件名,文件存储在服务器的文件名,文件在服务器的路径,文件类型),下载文件Action

package com.PoliceSystem.action.mail;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class downLoadFile extends ActionSupport{
private static final long serialVersionUID = -2207648627734251737L;

public String execute() throws Exception{
   HttpServletRequest request = ServletActionContext.getRequest();
   HttpServletResponse response = ServletActionContext.getResponse();
  
   String fileminitype = request.getParameter("fileType");
   String filename1 = new String(request.getParameter("fileName1").getBytes("ISO8859-1"),"UTF-8");
   String filename2 = new String(request.getParameter("fileName2").getBytes("ISO8859-1"),"UTF-8");
   String filepath = request.getRealPath("/upload1");
   File f = new File(filepath+");
   Long filelength = f.length();
   int cacheTime = 10;
  
   response.setContentType(fileminitype);
   response.setHeader("Location",filename1);
   response.setHeader("Cache-Control", "max-age=" + cacheTime);
  
   response.setContentType("application/octet-stream");
   byte[] b = filename1.getBytes("GBK");   
   filename1 = new String(b,"8859_1");   
   response.setHeader("Content-Disposition", "attachment;filename=" + filename1); 
   response.setContentLength(filelength.intValue());
   OutputStream outputStream = response.getOutputStream();
   InputStream inputStream = new FileInputStream(f);
   byte[] buffer = new byte[1024];
   int i = -1;
   while ((i = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, i);
   }
   
   outputStream.flush();
   outputStream.close();
   inputStream.close();
  
   return null ;
     }
}

分享到:
评论

相关推荐

    基于Python+Django简单实现文件上传下载功能源码.zip

    基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...

    局域网文件上传下载工具

    【局域网文件上传下载工具】是一个实用的软件应用,主要设计用于在局域网内的设备之间方便地进行文件的上传和下载操作。这个工具强调的是简单易用和跨平台特性,使得用户无论是在Windows、Mac还是Linux系统上都能...

    delphi做的文件上传下载服务器端

    标题 "delphi做的文件上传下载服务器端" 描述了一个使用Delphi编程语言开发的服务器程序,该程序专门设计用于处理文件的上传和下载功能。在IT领域,这样的系统通常涉及网络编程、多线程和并发处理,以确保能有效地...

    C# WinForm 文件上传下载

    总的来说,C# WinForm文件上传下载的实现涉及网络操作、文件处理、数据库交互等多个方面,需要对C#语言和相关技术有深入理解。通过`WebClient`类,我们可以轻松地完成基本的文件上传下载功能,但为了提供更健壮、...

    通用文件上传下载接口使用说明.docx

    本文档主要介绍了通用文件上传下载接口的使用说明,包括文件上传和文件下载两个部分。在文件上传部分,我们需要关注文件主键id,它是文件上传的唯一标识符,上传文件时将返回该id,以便后续下载和删除操作。 文件...

    C#webapi文件上传下载源码

    在这个场景下,"C# WebAPI文件上传下载源码"指的是使用C#编写的一套实现文件上传和下载功能的WebAPI服务代码。 文件上传功能是Web应用中的常见需求,允许用户将本地文件传输到服务器。在C# WebAPI中,这通常通过...

    基于jsp的文件上传下载

    "基于jsp的文件上传下载"是Web应用程序中的常见需求,涉及到客户端与服务器之间的数据交互。本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求...

    文件上传下载demo

    在IT行业中,文件上传下载是Web应用中常见且重要的功能之一。这个"文件上传下载demo"项目显然聚焦于实现这一功能,并对一个名为jspSmartUpload的组件进行了优化处理,特别是针对SmartUpload类进行升级,解决了文件名...

    Bootstrap自定义文件上传下载样式

    总结起来,Bootstrap自定义文件上传下载样式涉及的关键技术包括Bootstrap的样式和组件(如`.input-group`、`.input-group-addon`),HTML5的文件上传API,Font Awesome图标库,以及CSS3的`pointer-events`属性。...

    利用jsp实现文件上传下载

    JSP 实现文件上传下载 在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下...

    Jsp文件上传下载

    总结来说,JSP文件上传下载是通过SmartUpload库实现的,它简化了文件操作的复杂性,使得开发者能更专注于业务逻辑。通过理解和实践SmartUpload的用法,你将能够为你的Web应用添加这一关键功能。同时,理解文件上传...

    文件上传下载需要的jar包 java文件上传下载

    在这个场景下,"文件上传下载需要的jar包"指的是用于处理文件上传和下载操作的Java类库。下面将详细介绍相关的知识点。 1. **Apache Commons FileUpload**: 这是一个非常流行的Java库,用于处理HTTP请求中的多部分...

    tomcat 实现文件上传下载

    以上就是使用Struts2和Tomcat实现文件上传下载的基本流程。实际开发中,还需要考虑文件大小限制、多文件上传、错误处理、安全问题(如防止路径遍历攻击)等。通过这个示例,你可以了解到Struts2框架如何与Tomcat配合...

    嵌入式Linux下基于CGI的文件上传下载的实现

    ### 嵌入式Linux下基于CGI的文件上传下载实现 #### 1. 概述 随着嵌入式Linux的深入研究和发展,其在各领域的应用变得越来越广泛。嵌入式Linux是一种针对特定应用场景进行了裁剪和优化的Linux版本,能够适应资源...

    文件上传下载(C#+Sql2008)

    【文件上传下载(C#+Sql2008)】是一个基于C#编程语言和SQL Server 2008数据库的程序,旨在实现文件的上传和下载功能。在Web开发中,这样的功能通常用于用户交互,比如用户上传自己的文档、图片或者其他数据到服务器...

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    文件上传下载8个源码示例

    在IT行业中,文件上传下载是Web应用的基本功能之一,它涉及到客户端与服务器之间的数据交互。本资源包提供了8个源码示例,旨在帮助开发者快速掌握文件上传和下载的实现方式。下面,我们将深入探讨这些知识点。 1. *...

    基于Springboot2.x的文件上传下载管理系统设计源码

    本项目是一个基于Springboot2.x的文件上传下载管理系统,包含73个文件,主要文件类型包括Java源代码、图片、JavaScript脚本、XML配置文件、Git忽略文件、LICENSE文件、Markdown文档、SQL数据库文件、CSS样式表和图标...

    文件上传下载管理系统

    "文件上传下载管理系统"是一个基于Struts框架实现的简单应用,主要目标是提供用户友好的文件上传和下载功能。在Web开发中,文件上传和下载是常见的需求,尤其是在企业级应用中,例如文档共享、资源库管理等。Struts...

Global site tag (gtag.js) - Google Analytics