欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-08 13:37:52
        在web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下javaweb...

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

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

一、开发环境搭建

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

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

二、实现文件上传

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上传下载实例完整版解析(上)

以上文件上传功能完成!

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