javaweb上传下载实例完整版解析(上)

发布时间 - 2026-01-10 22:47:12    点击率:

        在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现,重点在文件上传

  对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。   

一、开发环境搭建

  创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示:

二、实现文件上传

2.1 文件上传页面
upload.html代码如下

<div>
 <h5>文件上传</h5><hr/> 
 <form id="file_upload_id" name="file_upload_name" > 
 <div><input type="file" name="file_upload"/></div>
 <div onclick = "upload()"><input type="button" value="上传" /></div><br>
 <div>
 <span id="typeValue"></span>
 <input id="type" type="hidden" name="input_type">
 </div>
 <div>
 <span id="sizeValue"></span>
 <input id="size" type="hidden" name="input_size">
 </div>
 </form> 
</div> 

<script>
$(function(){
 a();
}); 

 function a(){
 var size=1024 * 1024 * 50;
 var type=
 "gif,jpg,jpeg,png,bmp,swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb,doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,jsp";
 $("#type").val(type);//利用input传值到后台
 $("#typeValue").html("文件格式限制为:"+type);//显示
 $("#size").val(size);
 $("#sizeValue").html("文件大小限制为:"+size);
 } 

 function upload(){
 var formdata = new FormData($('#file_upload_id')[0]); 
 $.ajax({
 url: 'cloud/load/upload', 
 type: 'POST', 
 data: formdata, 
 dataType:'JSON',
 cache: false, 
 processData: false, 
 contentType: false ,
 success : function(date){
 alert("success"); 
 }, 
 error : function(e){
 alert("error");
 }
 });
 }
</script>

2.2 controller

package com.cloud.web.controller;

import java.io.IOException;
import java.util.HashMap;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.cloud.web.service.FileLoadService;

@Controller
@RequestMapping("/load")
public class LoadController {

 @Resource
 public FileLoadService fileLoadService;

 @RequestMapping(value = "/upload", method = RequestMethod.POST)
 @ResponseBody
 public HashMap<String,Object> upload(@RequestParam("file_upload") MultipartFile file,@RequestParam("input_type") String extName,@RequestParam("input_size") String size, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws ServletException, IOException {
 HashMap<String,Object> map = new HashMap<String,Object>();
 request.setCharacterEncoding("UTF-8");// 解决上传的中文文件乱码问题 
 response.setContentType("text/html;charset=UTF-8"); 
 long fileSizeMax=Long.parseLong(size);
 String mes =fileLoadService.doUpload(file,request, extName, fileSizeMax);
 map.put("mes", mes);
 return map; 
 }

}

2.3 service
FileLoadServiceImpl.java程序如下:

package com.cloud.web.service.impl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.cloud.web.service.FileLoadService;

@Service
public class FileLoadServiceImpl implements FileLoadService{

 @Override 
 public String doUpload(MultipartFile file, HttpServletRequest request, String extName, long fileSizeMax) throws ServletException, IOException{

 // 存放路径 
 String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/")+"/upload/test/"; 
 String msg="";//返回消息
 try { 
  String fileName = file.getOriginalFilename();// 获取上传的文件的文件名
  String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();// 获取上传文件的扩展名  

  if (fileName != null) { 
  System.out.println("上传的文件的扩展名是:" + fileExt);  
  if(!extName.contains(fileExt)){ 
   System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt);
   msg = msg + "文件:" + fileName + ",上传文件扩展名是不允许的扩展";

   }else if(file.getSize() > fileSizeMax){  
   // 如果需要限制上传的文件大小,不超过最大限制
   System.out.println("上传文件大小:" + file.getSize());
   msg = msg + "文件:" + fileName + ",上传文件大小超过限制大小";   
   }else{
   Date now = new Date(); 
   DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 
   String str = df.format(now);     
   String nFileName=str+"_"+fileName;

   // 生成一个子目录 
   String childDirectory = genChildDirectory(realPath); 
   File storeDirectory = new File(realPath + File.separator + childDirectory); 
   //如果目录不存在,就创建一个 
   if (!storeDirectory.exists()) { 
   storeDirectory.mkdirs(); 
   } 
   // 获取item中的上传文件的输入流
   InputStream is = file.getInputStream();
   //创建一个文件输出流
   FileOutputStream out = new FileOutputStream(storeDirectory + "\\" + nFileName);
   //创建一个缓冲区
   byte buffer[] = new byte[1024];
   //判断输入流中的数据是否已经读完的标致
   int len = 0;
   while((len = is.read(buffer)) > 0){
   out.write(buffer, 0, len);
   }

   out.close();//关闭输出流
   is.close(); //关闭输入流   
   msg="file:" + fileName + ",success";
   }
  } 

 } catch (Exception e) { 
  e.printStackTrace(); 
 }  
 return msg;
 }

 // 按照时间创建分目录 放置一个文件夹下面的文件过多 
 @Override
 public String genChildDirectory(String realPath) { 
 Date now = new Date(); 
 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
 String str = df.format(now); 

 File file = new File(realPath, str); 
 if (!file.exists()) { 
  file.mkdirs(); 
 } 
 return str; 
 }
}

界面展示:

文件上传位置:

以上文件上传功能完成!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# javaweb  # 上传  # 下载  # javaweb上传下载实例完整版解析(下)  # JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)  # JavaWeb实现文件上传下载功能实例详解  # Javaweb实现上传下载文件的多种方法  # JavaWeb文件上传下载功能深入分析(二)  # JavaWeb文件上传下载功能示例解析  # JavaWeb中struts2实现文件上传下载功能实例解析  # JavaWeb实现文件上传下载功能实例解析  # JavaWeb中上传和下载文件实例代码  # 文件上传  # 创建一个  # 扩展名  # 上传文件  # 文件扩展名  # 不存在  # 然后再  # 还需要  # 不超过  # 所示  # 开源  # 官网  # 大家多多  # 如下图  # 过程中  # 依赖于  # jpg  # docx  # doc 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在新浪SAE免费搭建个人博客?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Mybatis 中的insertOrUpdate操作  nodejs redis 发布订阅机制封装实现方法及实例代码  Swift中switch语句区间和元组模式匹配  bing浏览器学术搜索入口_bing学术文献检索地址  个人网站制作流程图片大全,个人网站如何注销?  C++时间戳转换成日期时间的步骤和示例代码  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  原生JS实现图片轮播切换效果  常州企业网站制作公司,全国继续教育网怎么登录?  无锡营销型网站制作公司,无锡网选车牌流程?  如何用VPS主机快速搭建个人网站?  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  北京专业网站制作设计师招聘,北京白云观官方网站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Linux系统运维自动化项目教程_Ansible批量管理实战  高端网站建设与定制开发一站式解决方案 中企动力  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Java解压缩zip - 解压缩多个文件或文件夹实例  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在搬瓦工VPS快速搭建网站?  如何生成腾讯云建站专用兑换码?  网站制作价目表怎么做,珍爱网婚介费用多少?  浅谈javascript alert和confirm的美化  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  千库网官网入口推荐 千库网设计创意平台入口  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  QQ浏览器网页版登录入口 个人中心在线进入  如何在景安服务器上快速搭建个人网站?  Python面向对象测试方法_mock解析【教程】  Android仿QQ列表左滑删除操作  Laravel怎么实现验证码(Captcha)功能  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何撰写建站申请书?关键要点有哪些?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  详解vue.js组件化开发实践  js代码实现下拉菜单【推荐】  浅谈redis在项目中的应用  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  浅谈Javascript中的Label语句