后端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

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

被折叠的 条评论
为什么被折叠?



