js已知文件路径得到file对象_文件 上传和下载 实现 058

b8fa25048d4436d520f4b16a87fff371.png

上传

jsp

<form action="add" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br>
<input type="file" name="photo">
<input type="submit" value="提交">
</form>

servlet

package com.bjsxt.controller;
import com.bjsxt.pojo.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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 java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;/** * true * name * huimou * null * null * 6 * 'v2-cf7051e0f3ad2f0bb9b52fedc9a7c7ef_hd.jpg * image/jpeg * 168389 */
// System.out.println(fileItem.isFormField()); //是否是 file 表单项 不是 file true ,是 file false
// System.out.println(fileItem.getFieldName()); //表单项属性的name 值
// System.out.println(fileItem.getString()); //对于非file表单项的value 属性值 , file表单项是文件的内容
// System.out.println(fileItem.getString("utf-8")); //解决非file 表单项的中文 乱码问题 比如 name
// System.out.println(fileItem.getName()); //对于file表单项 是上传文件的名称 , 对于非file表单项返回null
// System.out.println(fileItem.getContentType()); //对于file表单项,上传文件mime类型 对于非file表单项,返回null
// System.out.println(fileItem.getSize()); //对于file表单项是上传文件的大小 对于非file表单项value 的宽度
// System.out.println("==================================");
@WebServlet(name = "addServlet", urlPatterns = "/add")
public class addServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StudentService studentService=new StudentServiceImpl();
//1 创建 FileItemFactory对象
FileItemFactory factory=new DiskFileItemFactory();
//2 创建 ServletFileUpload 对象
ServletFileUpload upload=new ServletFileUpload(factory);
//指定上传文件的大小
upload.setFileSizeMax(1000*1024); //单个文件的限制大小
upload.setSizeMax(5*1000*1024); //所有文件的限制大小
upload.setHeaderEncoding("utf-8"); ///解决file 表单项的中文 乱码问题
// 3 通过ServletFileUpload 对象实现上传操作 将客户端一个个表单项 封装到一个个FileItem中
List<FileItem> itemlist=null;
try {
//这个 把 所有的request数据传到 upload 中
itemlist=upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
request.setAttribute("Filefalse", "上传文件大小超过限制");
request.getRequestDispatcher("add.jsp").forward(request,response );
return;
}
//4 遍历各个FileItem(相当于对各个表单项进行处理)
String name=null;
String fileName=null;
String realName=null;
String photoName=null;
String photoType=null;
for(int i=0;i< itemlist.size();i++){
FileItem fileItem = itemlist.get(i);
if(fileItem.isFormField()){ //判断是否是表单项
if("name".equals(fileItem.getFieldName())){ //判断表单项的name值
name= fileItem.getString("utf-8");
}
}else{ //file 表单项
if("photo".equals(fileItem.getFieldName())){
// 限制上传文件的类型
String contentType = fileItem.getContentType();
photoType=fileItem.getContentType();
if(!"image/jpeg".equals(contentType) && !("applica" +
"tion/javascript").equals(contentType) && !"image/gif".equals(contentType) && contentType!=null){
request.setAttribute("Filefalse", "只能上传jpg和js和GIF文件");
request.getRequestDispatcher("add.jsp").forward(request,response );
return;
}
//File dir=new File("/Users/guohaifeng/Desktop/"+File.separator+"回");
// /Users/guohaifeng/文档/尚学堂/尚学堂项目/尚学堂OA系统管理/web
//File dir=new File("/Users/guohaifeng/文档/尚学堂/尚学堂项目/尚学堂OA系统管理/web"+File.separator+"upload");
// 图片路径========/Users/guohaifeng/文档/尚学堂/尚学堂项目/尚学堂OA系统管理/out/artifacts/OA_war_exploded/mou
String realPath = this.getServletContext().getRealPath("mou"); //逻辑路径
//System.out.println("图片路径"+"========"+realPath);
File dir=new File(File.separator+realPath);
if(!dir.exists()){
dir.mkdirs();
}
//指定上传的文件名
realName= fileItem.getName();
// v2-91be6d0b41fa43d24243a8a61ac80c0d_hd.jpg/** *为 了防止上传图片名称重复使用UUID * String extName = Filename.substring(Filename.lastIndexOf(".")); 这句话用.截取图片的最后的扩展名 * UUID uuid = UUID.randomUUID() 生成这样的UUID(v2-91be6d0b41fa43d24243a8a61ac80c0d_hd) * String fileName = uuid.toString() + extName 最后拼接成这样 ( v2-91be6d0b41fa43d24243a8a61ac80c0d_hd.jpg) * fileName 这样就是图片的名称了 不会重复 */
String extName = realName.substring(realName.lastIndexOf(".")); //扩展名
UUID uuid = UUID.randomUUID();
photoName= uuid.toString() + extName;
File file= new File(dir,photoName);
try {
fileItem.write(file);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
System.out.println(name+"图片名称"+"===="+photoName);
Student student=new Student(name, realName, photoName, photoType);
int i=studentService.save(student);
if(i>0){
request.getRequestDispatcher("List").forward(request,response );
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

下载

package com.bjsxt.controller;
import com.bjsxt.pojo.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
import org.apache.commons.io.IOUtils;
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 java.io.*;
import java.net.URLEncoder;
@WebServlet(name = "downloadServlet", urlPatterns = "/download")
public class downloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
StudentService studentService=new StudentServiceImpl();
String photoName = req.getParameter("photoName");
Student student=studentService.finByphotoName(photoName);
System.out.println(student);
//通过io流实现照片下载操作
//创建一个输入输出流
String realPath = this.getServletContext().getRealPath("mou");
String Filename=realPath+"/"+student.getPhotoName();
File file=new File(Filename);
resp.setContentLength((int)file.length()); //文件的长度
resp.setContentType(student.getPhotoType()); //文件 的 MIM 类型
String realName = student.getRealName();
String userAgent = req.getHeader("User-Agent");
if(userAgent.indexOf("msie")>0){
realName=URLEncoder.encode(realName, "utf-8");
}else {
realName = new String(realName.getBytes("utf-8"), "iso-8859-1"); //解决中文图片乱码问题
}
resp.setHeader("Content-Disposition", "attachment; filename" + realName);
InputStream is=new FileInputStream(file); //读取服务器端的文件
OutputStream os=resp.getOutputStream(); //写到客户端
//使用输入流和输出流完成复制操作
IOUtils.copy(is, os);
is.close();
os.close();
}
}

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值