国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

javaweb上傳下載實例完整版解析(上)

2019-11-26 13:10:31
字體:
來源:轉載
供稿:網友

        在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;@Servicepublic 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 + "http://" + 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;  }}

界面展示:

文件上傳位置:

以上文件上傳功能完成!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无锡市| 七台河市| 林州市| 沅江市| 张北县| 津南区| 明水县| 曲阳县| 静海县| 于都县| 怀宁县| 天津市| 塔城市| 芦山县| 永济市| 义乌市| 平遥县| 桦川县| 浙江省| 天台县| 依安县| 阿鲁科尔沁旗| 金山区| 清水河县| 房产| 百色市| 平原县| 灵丘县| 赫章县| 垣曲县| 色达县| 溧水县| 江都市| 格尔木市| 呼玛县| 莆田市| 伊春市| 渑池县| 武夷山市| 宁阳县| 朔州市|