Servlet实现文件上传及实时下载,无需刷新文件夹

该博客介绍了如何使用Servlet和JSP实现文件上传,并在不刷新文件夹的情况下实现实时下载。通过隐藏输入字段传递文件名,适用于SSM和SpringBoot框架。提供上传和下载的JSP及Servlet代码示例,并附带码云项目的链接。

后端Servlet、前端Jsp,上传文件的时候,顺便把文件名通过<input type="hidden"/ name="filename">形式传到后端。

上传Jsp代码:

<form method="post" action="UploadServlet" enctype="multipart/form-data" onsubmit="return check();">
				资料名称:<input type="text" name="name" style="width: 200px;" id="name"><br>
				<br> 资料价格:<input type="text" name="price" style="width: 200px;" id="price"><br>
				<br> 资料类型:<select name="type" style="width: 200px;" id="type">
					<option value="0" selected="selected">游戏开发基础</option>
					<option value="1">移动应用开发基础</option>
					<option value="2">软件工程导论</option>
					<option value="3">企业级软件开发</option>
					<option value="4">算法分析与设计</option>
					<option value="5">类库与数据结构</option>
				</select><br>
				<br> 资料上传:<input type="file" name="file" style="width: 200px;" id="uploadfile"><br>
				<br>
				<input type="hidden" name="filename" id="filename">
				<button type="submit">保存</button>
			</form>

上传js代码: 

function check(){
        var name = document.getElementById("name").value;
        var type = document.getElementById("type").value;
        var price = document.getElementById("price").value;
        var file = document.getElementById("uploadfile");
        if(name == null ||name == ''){
        	alert('请填写资料名称!') ;
        	return false ;
        }
        if(type == null ||type == ''){
        	alert('请选择资料类型!') ;
        	return false ;
        }
        if(price == null ||price == ''){
        	alert('请填写资料价格!') ;
        	return false ;
        }
        
        var filePath = file.value;    //js中无法获取文件的真是路径
        var fileName = filePath.substring(filePath.lastIndexOf('\\')+1); //文件名
        var extName = fileName.substring(fileName.lastIndexOf('.')+1);    //后缀名
        console.log('文件名:'+fileName);
        console.log('后缀名:'+extName);
        document.getElementById("filename").value=fileName;
        if(fileName == null ||fileName == ''){
        	alert('请上传资料!') ;
        	return false ;
        }
        return true ;
	}

上传servlet代码(SSM、SpringBoot也适用)

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	//解决乱码
		response.setContentType("text/html;charset=utf-8");
        try {
            //获取文件描述信息
            String reqName=request.getParameter("name") ;
            reqName = new String(reqName.getBytes("iso-8859-1"),"utf-8") ;//通过new string进行编码转化
            String reqType=request.getParameter("type");
            reqType = new String(reqType.getBytes("iso-8859-1"),"utf-8") ;//通过new string进行编码转化
            String reqPrice=request.getParameter("price");
            reqPrice = new String(reqPrice.getBytes("iso-8859-1"),"utf-8") ;//通过new string进行编码转化
            String reqFileName=request.getParameter("filename");
            reqFileName = new String(reqFileName.getBytes("iso-8859-1"),"utf-8") ;//通过new string进行编码转化
            
            //获取上传的文件
            Part part=request.getPart("file");
            //获取请求的信息
            String name=part.getHeader("content-disposition");
            
            //获取上传文件的目录
            String root=request.getServletContext().getRealPath("/upload");
            System.out.println("测试上传文件的路径:"+root);

            //获取文件的后缀
            String str=name.substring(name.lastIndexOf("."), name.length()-1);
            System.out.println("测试获取文件的后缀:"+str);
            
            
            //生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的
            String newFileName = UUID.randomUUID().toString()+str;
            String filename=root+"\\"+newFileName ;
            System.out.println("测试产生新的文件名:"+newFileName);
            
            //信息存入数据库
            ResourceDao rDao = new ResourceDao() ;
            rDao.addResource(reqName, reqPrice, reqType, newFileName, reqFileName);
            
            //上传文件到指定目录,不想上传文件就不调用这个
            part.write(filename);
            
            PrintWriter out = response.getWriter();
            out.println("<script>alert('文件上传成功');window.location.href='/QuerySchedule/resourceAdd.jsp';</script>");
        } catch (Exception e) { 
            e.printStackTrace();
        }
    }

下载Jsp(upload对应上传的文件路径):

<a href="upload/${resource.filepath }" download="${resource.realpath }">下载</a><br/>

码云地址:https://gitee.com/rbrother/schedule-resource.git

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值