javaweb -数据管理系统 -向服务器上传和下载文件

引用jar包
apache: commons-fileupload.jar 组件,依赖于 commons-io.jar

前台:jsp:

表单提交方式必须为post
在表单中必须增加一个属性 enctype =“multipart/form-data”

   <form action = "UpAndDown" method ="post" enctype="multipart/form-data">
      选择上传文件:<input type = "file" name = "upLoadFile">
   </form>

注意的问题:
上传的目录 upload:
1,如果修改代码,则在tomcat重新启动时会被删除
原因: 当修改代码时 tomcat会重新编译一份class并且重新部署(重新创建各种目录)
2.如果不修改代码,则不会删除
因此,为了防止上传目录丢失: a.虚拟路径,b.直接更换上传目录到非tomcat目录

限制上传:类型,大小
注意:对文件的限制条件 写在parseRequest之前

下载:不需要依赖任何jar包
1.请求(地址) 请求servlet
2.servlet通过文件的地址 将文件转为输入流 读到servlet中
3.通过输出流将刚才已经转为输入流的文件输出给用户

需要设置2个响应头
response.addHeader(“contentType”, “application/octet-stream”);//MIME类型:二进制文件(任意文件)
response.addHeader(“content-Disposition”, “attachment;filename=”+filename);//filename包含了文件后缀

业务逻辑层(RomService.java)

package ServiceImpl;



import java.io.File;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import DaoImpl.DbDaoimpl;
import Service.Rom;
import entity.romData;
import entity.user;

public class RomImpl implements Rom {

	@Override
	public void upload(String path,String detail) {
		String sql = "INSERT INTO rom(path,detail) VALUES (?,?)";
		new DbDaoimpl().add(sql, path, detail);
	}

	@Override
	public List<romData> getDataByPage(int index, int size) {
		String sql = "SELECT * FROM rom LIMIT ? , ?";
		List<romData> list = new ArrayList<>();
		ResultSet result =  new DbDaoimpl().Select(sql, index*size,(index+1)*size-1);
		try{
			while(result.next()){
				int id = result.getInt(1);
				String path = result.getString(2);
				String detail = result.getString(3);
				romData da = new romData(path,detail,id);
				list.add(da);
			}
		}catch(Exception e){
			System.out.println("getDataByPage in rom");
			e.printStackTrace();
		}
		return list;
	}
	
	public void delete(String filename){
		String sql = "DELETE FROM rom WHERE path = ?";
		new DbDaoimpl().delete(sql, filename);
		String path = "D:\\apache-tomcat-8.5.45\\upload\\" +filename;
		File file = new File(path);
		file.delete();
	}
}

表示层后端:(delete.java)

package netRomServlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ServiceImpl.RomImpl;

/**
 * Servlet implementation class delete
 */
@WebServlet("/delete")
public class delete extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public delete() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String filename = request.getParameter("filename");
		new RomImpl().delete(filename);
		response.sendRedirect("netRom.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

downloadService.java

package netRomServlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public downloadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String filename = request.getParameter("filename");
		request.setCharacterEncoding("utf-8");
		//下载文件:需要设置消息头
		response.addHeader("contentType", "application/octet-stream");//MIME类型:二进制文件(任意文件)
		response.addHeader("content-Disposition", "attachment;filename="+filename);//filename包含了文件后缀
		
		//servlet通过文件的地址 将文件转为输入流 读到servlet中
		String path = "D:\\apache-tomcat-8.5.45\\upload\\" +filename;
		//InputStream in = getServletContext().getResourceAsStream(path);
		File file = new File(path);
		InputStream in = new FileInputStream(file);
		//通过输出流将刚才已经转为输入流的文件输出给用户
		ServletOutputStream out = response.getOutputStream();
		byte[] buffer = new byte[1024];
		int lenth = -1;
		while((lenth = in.read(buffer))!=-1){
			out.write(buffer,0,lenth);
		}
		in.close();
		out.close();
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

UpAndDown.java

package netRomServlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import ServiceImpl.RomImpl;


@WebServlet("/UpAndDown")
public class UpAndDown extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public UpAndDown() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("utf-8");
		String detail = null;
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		try{
			if(isMultipart){//判断前台的form是否有multipart属性
				DiskFileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);
				//控制上传文件大小   30kb
				upload.setSizeMax(3000*1024);//字节B
				//设置临时文件大小(缓冲文件大小)
				factory.setSizeThreshold(1024*10);
				//设置临时文件存放路径
				//factory.setRepository(new File(path));
				//通过parseRequest解析的form中的所有请求字段,并保存在items集合中(即前台转递的数据就保存在items中)
				List<FileItem> items = upload.parseRequest(request);
				Iterator in = items.iterator();
				while(in.hasNext()){
					FileItem item = (FileItem) in.next();
					if(item.getFieldName().equals("detail")){//根据name属性判断item是那一个提交值
						detail = item.getString();
					}
					if(item.getFieldName().equals("UploadFile")){
						//文件上传:
						//文件名: getFieldName是获取普通表单字段的Name值
						//getName()是获取文件名
						String filename = item.getName();
						//获取文件内容并上传
						//定义文件路径:指定上传的位置(服务器路径)
						//获取服务器路径(指定到tomcat下会被清除)
						//String path = request.getSession().getServletContext().getRealPath("upload");
						if(filename.endsWith("pdf")||filename.endsWith("jpg")){
							
							String path  = "D:\\apache-tomcat-8.5.45\\upload";
							File file = new File(path, filename);
							new RomImpl().upload(filename, detail);
							item.write(file);//上传
							System.out.println("上传成功!");
							request.setAttribute("good", "good");
						}else{
							request.setAttribute("type", "error");
						}	
					}		
				}	
			}
		}catch(FileUploadBase.SizeLimitExceededException e){
			System.out.println("out of Size error!");
			request.setAttribute("size", "error");

			//e.printStackTrace();
			
		} catch (Exception e) {
			System.out.println("upAndDown error!");
			e.printStackTrace();
		}finally{
			request.getRequestDispatcher("netRom.jsp").forward(request,response);
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

表示层前端(netRom.jsp)

<%@page import="ServiceImpl.RomImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import = "ServiceImpl.RomImpl" %>
    <%@ page import = "entity.romData" %>
    <%@ page import = "java.util.List" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		if(request.getAttribute("good")!=null){
			out.print("<script type = 'text/javascript'>alert('上传成功!');</script>");
		}else if(request.getAttribute("type")!=null){
			out.print("<script type = 'text/javascript'>alert('类型异常!');</script>");
		}else if(request.getAttribute("size")!=null){
			out.print("<script type = 'text/javascript>alert('文件太大!');</script>");
		}
	
	%>
	
	<form action = "UpAndDown" method ="post" enctype="multipart/form-data">
		备注:<input type = "text" name = "detail">
		选择上传文件:<input type = "file" name = "UploadFile">
		<input type = "submit" value = "上传">
	</form>
	
	<table border="1px">
		<tr>
			<th>id</th>
			<th>详情</th>
			<th>文件</th>
			<th>下载</th>
			<th>删除</th>
		</tr>

	
	<%	
		int index = 0;
		String index_s = (String)request.getAttribute("index");
		if(index_s != null){
			index = Integer.parseInt(index_s);
		}
		List<romData> result = new RomImpl().getDataByPage(index, 10);
		if(result != null){
			for(romData da : result){
				%>
				<tr>
					<td><%=da.getId() %></td>
					<td><%=da.getDetail() %></td>
					<td><%=da.getPath() %></td>
					<th><a href = "downloadServlet?filename=<%=da.getPath()%>">下载</a></td>
					<th><a href = "delete?filename=<%=da.getPath()%>">删除</a></td>
				</tr><br/>
				<%
			}
		}
	%>
		</table>
	
	

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能介绍 名称:自动上传压缩工具 作用:用于同城购开发团队多人合作开发升级时使用,升级文件列表文件upgrade.config,在开发工作完成后推送即可 开发环境:使用.net 2.0 开发,使用时必须安装.net 2.0环境 upgrade.config 文件说明 属性说明:type:文件类型css、js ;bak="true":备份,bak="false"不备份 <item type="css">test/test.css</item>//自动压缩,自动备份 <item type="js" bak="false">test/test.js</item> //自动压缩,不备份 <item>test/test.jpg</item>//上传并备份 <item bak="false">test/test.jpg</item>//上传不备份 <item>test/a/*.jpg</item>//批量上传 css文件支持压缩,默认备份 使用说明:将upgrade.config文件放到本地网站根目录,然后设置好相应的工具配置config.ini项就可使用了。 新增功能 2013-4-13 1.使用js压缩工具的时候可用google的Compiler库,需要设置java目录的环境变量 2.多人协作使用新增了include语法,例子在upgrade.config中设置 3.自动识别了js、css文件类型,并能自动压缩 4.配置说明 <include file="templates/upgrade.ini" defpath="templates" bak="false" type="list" /> defpath:默认路径名称,如果团队成员只允许一个目录的权限则有必要设置 bak:备份默认 type:只有值为list的时候,才允许下级配置列表使用单行文件列表 <include file="upgrade.ini" defpath="" bak="false" type="list" /> upgrade.ini 文件配置说明 注释:采用符号;或者#开头的识别为注释 列表方式:直接写文件路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值