java web项目实现文件上传和文件下载功能

java开发工程师 同时被 3 个专栏收录
8 篇文章 0 订阅
7 篇文章 0 订阅
7 篇文章 0 订阅

java web项目实现文件上传和文件下载功能

2019-07-04 你源

今天来讲一下java web文件上传和文件下载,文件上传有很多种方式。现将这些方式分享给大家。还是全力以赴每一天[韬光养晦 厚积薄发]~~~~

文件下载

//文件下载功能
// 前台页面我用的是Easyui框架写的前台页面
  <!-- 页面加载开始 -->
     	<div id="panel_datagrid_uploads_m080" title="文件上传" class="easyui-panel" data-options="fit:true" border="false">
		<div id="toolbar_uploads_m080">
		<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true" onclick="openDownloadsAdd_m080()">文件下载</a>
		</div>
		</div>
  <!--页面加载结束-->
  <!--打开文件下载窗口开始  -->
	 	<div id="dialog_add_downloads_m080"
		style="display: none; top: 10%; width: 600px; height: 400px; padding: 10px 20px">
	    <a href="" id="ssUrl" class="easyui-linkbutton">文件下载</a>  
		</div>
 <!--打开文件下载窗口结束  -->	
//页面所对应的的js文件
//文件下载
//dialog
var dialog_add_downloads_m080;
function openDownloadsAdd_m080(){
	dialog_add_downloads_m080=$('#dialog_add_downloads_m080').show().dialog({
		title:'文件下载',
		modal:true
	});
}
//文件下载 filename是需要从数据库查询出来现将定义成固定值myfile.txt
var filename="myfile.txt";
$("#ssUrl").attr('href',"uploadfile/download?filename="+filename);
// java后台代码篇
//  java代码篇
@RequestMapping(value = {"/download"},method = RequestMethod.GET)
	public void download(@RequestParam("filename") String filename, HttpServletRequest request,HttpServletResponse response) throws IOException {
		if(!StringUtils.isEmpty(filename)) {
			//模拟文件,myfile.txt为需要下载的文件  
	        String path = "D:\\file"+"\\"+filename; 
	        //创建添加定义获取文件
	        File file=new File(path);
	        //创建添加定义获取该文件的文件输入流
            FileInputStream fileInputStream=new FileInputStream(file);
		    //创建添加定义将文件输入流放在输入流里
            InputStream inputStream=new BufferedInputStream(fileInputStream);
            //创建添加定义转码防止文件名中文乱码
		    filename=URLEncoder.encode(filename,"UTF-8");
		    //创建添加定义设置文件下载头
		    response.setHeader("Content-Disposition", "attachment;filename=" + filename);
		    //创建添加定义设置下载文件类型
		    response.setContentType("multipart/form-data");
		    //创建添加定义获取文件输出流
		    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(response.getOutputStream());
		    int len=0;
		    while((len = inputStream.read()) != -1){  
		    	bufferedOutputStream.write(len);  
		    	bufferedOutputStream.flush();  
	        }  
		    bufferedOutputStream.close();
		}
		
	}

文件下载功能注意几点,我的下载的路径固定为"D:\file"+"\"+filename;这个路径,也可是Tomcat发布好的webapps下。注意文件名的拼写,注意路径的配置。如有问题可以留言讨论哦。

文件上传

文件上传的第一种方式(直接使用form表单提交)
// 直接使用form表单提交
// 前台页面直接使用form表单提交
   <div>
        <!-- 第一种方式直接使用form表单的方式实现文件上传 -->
    	<form action="${pageContext.request.contextPath}/user/uploadfile/uploadfile1" method="post" enctype="multipart/form-data">
    	<input type="file" name="ffFile" />
    	<input type="submit" value="上传" />
    	</form> 
    </div> 
//后台java代码
// 后台java代码
/**
	 * 创建添加定义一个使用Spring实现文件上传
	 * @param request
	 * @return
	 * @throws IOException 
	 * @throws IllegalStateException 
	 */
	@RequestMapping("/uploadfile1")
	@ResponseBody
	public ResultJson springUpload1(HttpServletRequest request) throws IllegalStateException, IOException {
	    ResultJson resultJson=new ResultJson();
	    //获取从1970年到现在的毫秒数
	    Long startTime=System.currentTimeMillis();
	    //将当前上下文初始化给CommonsMultipartResolver(多部分解析器)
	    CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());
	    //检查form表单中有没有enctype="multipart/form-data"这个属性
	    if(commonsMultipartResolver.isMultipart(request))
        {
	    //将request转换成多部分请求
		MultipartHttpServletRequest multipartHttpServletRequest=(MultipartHttpServletRequest) request;
		//获取multipartHttpServletRequest的所有的文件名
		Iterator irIterator=multipartHttpServletRequest.getFileNames();
		while(irIterator.hasNext()) {
		MultipartFile multipartFile=multipartHttpServletRequest.getFile(irIterator.next().toString());
		if(multipartFile!=null){
			String path="E:/springUpload/"+multipartFile.getOriginalFilename();
			// 检查该路径对应的目录是否存在,如果不存在则创建目录
						File dir = new File(path);
						if (!dir.exists()) {
							dir.mkdirs();
						}
			//上传
				
			 multipartFile.transferTo(new File(path));
		}
		}
        }
	    Long endTime=System.currentTimeMillis();
	    System.out.println("文件上传一共用时 "+String.valueOf(endTime-startTime)+" 毫秒");
	    return resultJson;
	}
	

注释很清楚啦。有问题评论我会给你解决的哦。

文件上传的第二种方式(使用ajax的formData的方式实现文件上传)
//使用ajax的formData的方式实现文件上传
// 前台页面使用ajax的formData的方式实现文件上传
     <!--第二种方式使用ajax的formData的方式实现文件上传  -->
	 <!--打开文件上传窗口开始  -->
	 	<div id="dialog_add_uploads_m080"
		style="display: none; top: 10%; width: 600px; height: 400px; padding: 10px 20px">
		<form id="tf">
            <input  class="easyui-filebox" name="ffFile"/>
            <input class="easyui-linkbutton" data-options="iconCls:'icon-ok'" value="文件上传" onclick="test();" "/>
        </form>
		</div>
	 <!--打开文件上传窗口结束  -->	
// 前台页面所对应的js文件
// 前台页面所对应的js文件
//文件上传1
// add dialog 
var dialog_add_uploads_m080;
function openUploadsAdd1_m080(){
	dialog_add_uploads_m080=$('#dialog_add_uploads_m080').show().dialog({
		title:'文件上传1',
		modal:true
	});
}
//这个是在jsp页面中写的js,需要获取项目的根路径不可以使用相对路径
  <script type="text/javascript">
    var rootPath="${pageContext.request.contextPath}";
    function test(){
    	 var form = new FormData(document.getElementById("tf"));
    	 $.ajax({
             url:rootPath+"/user/uploadfile/uploadfile",
             type:"post",
             data:form,
             cache: false, 
             processData:false,
             contentType:false,
             success:function(data){
            	 if(data!=null){
                 console.log("成功不为空");
                 alert("成功不为空!");
            	 }else{
                 console.log("失败为空");
                 alert("失败!");
            	 }
            	 },
             error:function(e){
                 alert("错误!!"+e);
                 window.close(); 
             }
         });            
    }
    </script>
// java后台代码
// 第二种方式使用ajax的formData的方式实现文件上传

	/**
	 * 创建添加定义一个 使用Spring实现文件上传
	 * 
	 * @return
	 */
	@RequestMapping("/uploadfile")
	@ResponseBody
	public ResultJson springUpload(HttpServletRequest request) {
		ResultJson json = new ResultJson();
		MultipartFile uploadFile = ((MultipartHttpServletRequest) request).getFile("ffFile");
		uploadFile(uploadFile, request);
		return json;
	}
	public String uploadFile(MultipartFile multipartFile,HttpServletRequest request) {
		String fileName = null;
		System.out.println("------------------------------------0202020202020202------------------------------------");
		if (multipartFile != null) {
			DateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
			String orgFileName = multipartFile.getOriginalFilename();
			//fileName = format.format(new Date()) + orgFileName;
			if(!SysUtil.isNULL(orgFileName)){
				fileName = format.format(new Date()) + "-" + orgFileName;
				// 设置保存路径
				String path = request.getServletContext().getRealPath("/upload");
				// 检查该路径对应的目录是否存在,如果不存在则创建目录
				File dir = new File(path);
				if (!dir.exists()) {
					dir.mkdirs();
				}
				String filePath = path + "\\" + fileName;
				
				System.out.println(filePath + "controller path");
				File file = new File(filePath);
				try {
					multipartFile.transferTo(file);
				} catch (IllegalStateException e) {
					System.out.println(e.getMessage());
				} catch (IOException e) {
					System.out.println(e.getMessage());
				} 
			}
			
		}
		return fileName;
	}

链接: link.
https://blog.csdn.net/qq_35759451
图片: Alt
欢迎加我qq讨论技术2917055611

  • 5
    点赞
  • 2
    评论
  • 36
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值