java上传与下载文件_java实现文件的上传和下载功能

52a16685a854259f8e7e4b084afde1dc.png

准备工作

(视频教程推荐:java课程)

需要导入的jar包

92f6aa2556a81c79cd810642369c6132.png

运行截图

文件上传截图

f5a346953c6f6fe096197cceea3884d7.png

文件下载截图

10b3d7f289f76e91b0f3747d410c268e.png

上传文件代码servlet@WebServlet(name = "UploadServlet",value = "/upload")

@MultipartConfig(maxFileSize = 1024*1024*5,maxRequestSize = 1024*1024*20) //1 添加MultipartConfig注解

public class UploadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//存放文件的目录

String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");

File dir=new File(realPath);

if(!dir.exists()){

dir.mkdirs();

}

List allowExts=new ArrayList();

allowExts.add("jpg");

allowExts.add("png");

allowExts.add("gif");

//1乱码

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

//2使用getParts()获取数据

Collection parts = request.getParts();

//3遍历

PrintWriter out = response.getWriter();

if(parts!=null&&parts.size()>0){

for (Part part : parts) {

//判断表单元素是普通字段,还是文件

String submittedFileName = part.getSubmittedFileName();

if(submittedFileName==null){//普通字段

String name = part.getName();

String value = request.getParameter(name);

System.out.println(name+"..."+value);

}else{//文件

//判断文件是否为""

if(submittedFileName.equals("")){

continue;

}

//System.out.println(submittedFileName);

//从请求头中获取文件

String dis = part.getHeader("content-disposition");

String filename=dis.substring(dis.lastIndexOf("filename=")+10, dis.length()-1);

filename=filename.substring(filename.lastIndexOf("\\")+1);

System.out.println(filename);

//获取文件名的后缀

String ext=filename.substring(filename.lastIndexOf(".")+1);

if(!allowExts.contains(ext)){

out.println(filename+"不符合上传文件类型要求...");

continue;

}

//把文件保存

//1创建新的文件名

String newFileName = UploadUtils.makeNewFileName(filename);

//2创建新的路径

String newPath = UploadUtils.makeNewPath(realPath, filename);

part.write(newPath+File.separator+newFileName);

//删除part

part.delete();

out.println("上传成功:"+filename);

}

}

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request,response);

}

}

每个属性表示的内容

93520b449bbe791d41c60c6d46720f8e.png

文件下载代码servlet@WebServlet(name = "DownLoadServlet",value = "/download")

public class DownLoadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//乱码

request.setCharacterEncoding("utf-8");

//获取文件名

String uuidFilename = request.getParameter("filename");//d578be74fd864ac2a879d77b07f13793_backg.jpg

//去掉uuid

String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);

//存放文件的根路径

String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");

//获取真正目录

String path = UploadUtils.makeNewPath(realPath, filename);

File file=new File(path+ File.separator+uuidFilename);

if(file.exists()){

response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(filename, "utf-8"));

ServletOutputStream os = response.getOutputStream();

FileInputStream fis=new FileInputStream(file);

byte[] buf=new byte[1024*4];

int len=0;

while((len=fis.read(buf))!=-1){

os.write(buf,0,len);

}

}else{

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("文件不存在...");

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

}

每个属性表示的内容

6c4938d2b894a5d51e56394d133f5b6a.png

读取下载文件servlet@WebServlet(name = "ListFileServlet",value = "/listfile")

public class ListFileServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//1读取可以被下载的文件

String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");

HashMap map=new HashMap<>();

UploadUtils.listFile(new File(realPath),map);

//2放入域中

request.setAttribute("map", map);

//3转发

request.getRequestDispatcher("/list.jsp").forward(request, response);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

}

工具类servletpublic class UploadUtils {

public static void main(String[] args) {

String s = makeNewFileName("aaa.jpg");

System.out.println(s);

}

/**

* 根据原始文件名产生一个新的文件名

* @param filename

* @return

*/

public static String makeNewFileName(String filename){

//UUID 统一唯一标识码

String uuid = UUID.randomUUID().toString().replace("-", "");//默认32位的16进制

return uuid+"_"+filename;

}

/**

* 创建新的路径

* @param path

* @param filename

* @return

*/

public static String makeNewPath(String path,String filename){

int num = filename.hashCode();//01101011001011011111111111 1111 0101 0101

int path1=num&0xf;

int path2=(num>>4)&0xf;

String newPath=path+ File.separator+path1+File.separator+path2;

File dir=new File(newPath);

if(!dir.exists()){

dir.mkdirs();

}

return newPath;

}

//遍历可以被下载的文件

public static void listFile(File dir,HashMap map){

File[] files = dir.listFiles();

if(files!=null&&files.length>0){

for (File file : files) {

if(file.isDirectory()){

listFile(file, map);

}else{

//文件

String uuidFilename=file.getName();

String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);

map.put(uuidFilename,filename);

}

}

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值