最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年01月24日 15:58:55   作者:求上進(jìn)的程序媛  
這篇文章主要為大家詳細(xì)解析了javaweb上傳下載實例,本文重點在于文件上傳功能的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下

        在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,今天來講一下JavaWeb中的文件上傳和下載功能的實現(xiàn),重點在文件上傳

  對于文件上傳,瀏覽器在上傳的過程中是將文件以流的形式提交到服務(wù)器端的,如果直接使用Servlet獲取上傳文件的輸入流然后再解析里面的請求參數(shù)是比較麻煩,所以一般選擇采用apache的開源工具common-fileupload這個文件上傳組件。這個common-fileupload上傳組件的jar包可以去apache官網(wǎng)上面下載,也可以在struts的lib文件夾下面找到,struts上傳的功能就是基于這個實現(xiàn)的。common-fileupload是依賴于common-io這個包的,所以還需要下載這個包。   

一、開發(fā)環(huán)境搭建

  創(chuàng)建一個FileUploadAndDownLoad項目,加入Apache的commons-fileupload文件上傳組件的相關(guān)Jar包,如下圖所示:

二、實現(xiàn)文件上傳

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();// 獲取上傳文件的擴(kuò)展名  

  if (fileName != null) { 
  System.out.println("上傳的文件的擴(kuò)展名是:" + fileExt);  
  if(!extName.contains(fileExt)){ 
   System.out.println("上傳文件擴(kuò)展名是不允許的擴(kuò)展名:" + fileExt);
   msg = msg + "文件:" + fileName + ",上傳文件擴(kuò)展名是不允許的擴(kuò)展";

   }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); 
   //如果目錄不存在,就創(chuàng)建一個 
   if (!storeDirectory.exists()) { 
   storeDirectory.mkdirs(); 
   } 
   // 獲取item中的上傳文件的輸入流
   InputStream is = file.getInputStream();
   //創(chuàng)建一個文件輸出流
   FileOutputStream out = new FileOutputStream(storeDirectory + "\\" + nFileName);
   //創(chuàng)建一個緩沖區(qū)
   byte buffer[] = new byte[1024];
   //判斷輸入流中的數(shù)據(jù)是否已經(jīng)讀完的標(biāo)致
   int len = 0;
   while((len = is.read(buffer)) > 0){
   out.write(buffer, 0, len);
   }

   out.close();//關(guān)閉輸出流
   is.close(); //關(guān)閉輸入流   
   msg="file:" + fileName + ",success";
   }
  } 

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

 // 按照時間創(chuàng)建分目錄 放置一個文件夾下面的文件過多 
 @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; 
 }
}

界面展示:

文件上傳位置:

以上文件上傳功能完成!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA中常用的設(shè)計模式:單例模式,工廠模式,觀察者模式

    JAVA中常用的設(shè)計模式:單例模式,工廠模式,觀察者模式

    設(shè)計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長的一段時間的試驗和錯誤總結(jié)出來的。
    2020-04-04
  • springboot3 使用 jasypt 加密配置文件的使用步驟

    springboot3 使用 jasypt 加密配置文件的使用步驟

    在SpringBoot項目中,使用Jasypt加密配置文件可以有效保護(hù)敏感信息,首先,需添加Jasypt依賴并配置加密密碼,可在application.properties或通過啟動參數(shù)、環(huán)境變量設(shè)置,本文介紹了Jasypt的配置步驟及使用方法,幫助開發(fā)者保護(hù)應(yīng)用配置信息
    2024-11-11
  • java 基本算法之歸并排序?qū)嵗a

    java 基本算法之歸并排序?qū)嵗a

    這篇文章主要介紹了java 基本算法之歸并排序?qū)嵗a的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 解析ConcurrentHashMap: transfer方法源碼分析(難點)

    解析ConcurrentHashMap: transfer方法源碼分析(難點)

    ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的方法

    Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的方法

    這篇文章主要給大家介紹了關(guān)于Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 使用SpringMVC的@Validated注解驗證的實現(xiàn)

    使用SpringMVC的@Validated注解驗證的實現(xiàn)

    這篇文章主要介紹了使用SpringMVC的@Validated注解驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 解決SpringBoot引用別的模塊無法注入的問題

    解決SpringBoot引用別的模塊無法注入的問題

    這篇文章主要介紹了解決SpringBoot引用別的模塊無法注入的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    本文介紹了JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java通過注解翻譯字典的實現(xiàn)示例

    java通過注解翻譯字典的實現(xiàn)示例

    本文主要介紹了java通過注解翻譯字典的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Windows下gradle的安裝與配置的超詳細(xì)教程

    Windows下gradle的安裝與配置的超詳細(xì)教程

    這篇文章主要介紹了Windows下gradle的安裝與配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

大厂| 芦山县| 刚察县| 泗水县| 云浮市| 延吉市| 祁东县| 荥经县| 陆丰市| 龙山县| 青州市| 东至县| 娄烦县| 石城县| 化隆| 陇川县| 衡山县| 资阳市| 巫溪县| 山西省| 盐城市| 景洪市| 宜兴市| 淄博市| 湛江市| 桂阳县| 丁青县| 天峻县| 永清县| 津南区| 丹寨县| 双城市| 墨玉县| 乐山市| 广饶县| 威信县| 九寨沟县| 昔阳县| 措美县| 长海县| 包头市|