Java学习笔记day38

网址路径

相对路径:
.
..
资源地址:当前目录下的文件
注意:相对于浏览器地址栏中的地址
绝对路径:
/
/的含义:
/在浏览器中的解释:http://ip:端口
/在服务器中的解释:http://ip:端口/项目路径
特殊请求:重定向中/表示的含义http://ip:端口

文件上传

作用: 将客户端文件传递到服务器端
前端: 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<div id="content">
<form action="regist" method="post" enctype="multipart/formdata">
<h3>注册</h3>
<p>
账号:<input type="text" placeholder="请输入账号"
name="usn"/>
</p>
<p>
密码:<input type="password" placeholder="请输入密码"
name="psw"/>
</p>
<p>
昵称:<input type="text" placeholder="请输入昵称"
name="name"/>
</p>
<p>
性别:
<input type="radio" value="" name="sex"/><input type="radio" value="" name="sex"/></p>
<p>
年龄:<input type="number" placeholder="请输入年龄"
name="age"/>
</p>
<p>
头像:<input type="file" name="img"/>
</p>
<input type="submit" value="注册"/>
</form>
</div>
</body>
</html>
后端: 
package com.test.demo02;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
@WebServlet("/regist")
@MultipartConfig
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1,加@MultipartConfig,为了避免数据压缩带来的数据获取问题
//2,获取前端上传的数据
String usn = request.getParameter("usn");
String psw = request.getParameter("psw");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String age = request.getParameter("age");
//3,获取上传的文件
Part part = request.getPart("img");
//4,获取上传的文件信息
String info = part.getHeader("Content-Disposition");
System.out.println(info);
//5,截取文件后缀名
int start = info.lastIndexOf(".");
int end = info.lastIndexOf("\"");
String hz = info.substring(start, end);
System.out.println(hz);
//6,拼接文件名
String fileName = usn+hz;
System.out.println(fileName);
//7,获取文件存储位置
String realPath = getServletContext().getRealPath("/files");
System.out.println("服务器绝对路径"+realPath);
//8,在web文件夹下,创建存储头像的文件夹(files)
//注意:先给存储头像的文件夹里面放一个文件,因为服务器不会部署空文件String savePath = realPath + "\\" + fileName;
System.out.println(savePath);
//9,存储图片到指定路径
part.write(savePath);
}
}

文件下载

前端: 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取图片</title>
</head>
<body>
<img src="getImg?img=zxc.jpg" style="width:200px;">
</body>
</html>
后端: 
package com.test.demo03;
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;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/getImg")
public class GetImgServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//1,获取前端需要的文件名称
String img = request.getParameter("img");
//2,设置响应的数据格式
response.setContentType("application/image");
//3,设置响应头
response.setHeader("ContentDisposition","attachment;fileName="+img);
//4,获取响应的字节流
ServletOutputStream os = response.getOutputStream();
//5,获取文件所在地址
String realPath = getServletContext().getRealPath("/files");
//6,拼接文件路径
String imgpath = realPath + "\\"+img;
//7,创建文件输入流,读取指定文件
FileInputStream is = new FileInputStream(imgpath);
//8,循环读取
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b)) != -1){
os.write(b,0,len);
}
os.flush();
//9,关闭资源
os.close();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值