91精产品自偷自偷综合官网版下载-91精产品自偷自偷综合下-91精品-91精品91久久久-91精品成人-91精品成人www

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

利用SpringMVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能

本篇文章給大家分享的是有關(guān)利用Spring MVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)成立與2013年,先為祥符等服務(wù)建站,祥符等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為祥符企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

1、使用Spring MVC 上傳文件必須配置文件解析器,如下:

 
  
   
   
  
 

2、建立上傳文件表單代碼,其中要注意form表單中的enctype 屬性,必須存在且必須為multipart/form-data。還有當(dāng)form中存在button標(biāo)簽時(shí),用ajax異步提交表單后,也面會(huì)被刷新。原因:button 存在時(shí)會(huì)再次提交一下表單,所以頁(yè)面被刷新了。


 3.1、使用CommonsMultipartFile接收上傳文件,其中要注意的是:方法中CommonsMultipartFile對(duì)應(yīng)的變量名如果不是對(duì)應(yīng)表單中文件輸入框的名稱(chēng)就必須加上@RequestParam("txtFile") 強(qiáng)制注入。

 /**
   * @Description: 通過(guò)文件流的形式上傳
   * @param file  @RequestParam("txtFile") 將name=txtFile控件得到的文件封裝成CommonsMultipartFile對(duì)象,
   *       如果不這樣做會(huì)報(bào)CommonsMultipartFile沒(méi)有初始化的錯(cuò)誤
   *       java.lang.NoSuchMethodException: org.springframework.web.multipart.commons.CommonsMultipartFile.()
   * @return
   * @author yuanfy
   * @date 2017年9月15日 下午4:36:11 
   * @version 6.5
   */
  @RequestMapping(value="test/upload1")
  @ResponseBody
  public String testUpload1(@RequestParam("txtFile")CommonsMultipartFile file){
    Long times = System.currentTimeMillis();
    if (file == null) {
      return null;
    }
    StringBuilder fileContent = new StringBuilder();
    //1、獲取文件信息
    FileUtils.getFileInfo(file, fileContent);
    
    //2、上傳文件并獲取文件內(nèi)容
    try {
      file.transferTo(new File("F:\\text.log"));//另存文件
      fileContent.append(FileUtils.getFileContentByLine(file.getInputStream()));
    }
    catch (IOException e) {
      return "獲取文件內(nèi)容失敗";
    }
    
    //3、返回文件信息和內(nèi)容
    String content = fileContent.toString();
    content = content.replace("times", (System.currentTimeMillis()-times) + "ms");
    return content;
  }

  界面效果圖如下:

利用Spring MVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能

3.2、使用CommonsMultipartResolver獲取存放文件對(duì)象,拿到文件對(duì)象后遍歷每個(gè)文件上傳及獲取相關(guān)的內(nèi)容。

@RequestMapping(value="test/upload2")
  @ResponseBody
  public String testUpload2(HttpServletRequest request){
    Long times = System.currentTimeMillis();
    StringBuilder fileContent = new StringBuilder();
    //1.根據(jù)servletContext獲取多文件上傳解析組件
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    if (!multipartResolver.isMultipart(request)) {
      return "不是上傳文件表單,請(qǐng)檢查表單屬性";
    }
    //2.將請(qǐng)求對(duì)象轉(zhuǎn)換為多文件請(qǐng)求對(duì)象。
    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
    //3、根據(jù)多文件請(qǐng)求對(duì)象獲取文件存放Map
    Map fileMap = multipartHttpServletRequest.getFileMap();
    Iterator> iterator = fileMap.entrySet().iterator();
    //4、迭代文件Map,獲取具體的MultipartFile
    while (iterator.hasNext()) {
      Entry entry = iterator.next();
      MultipartFile multipartFile = entry.getValue();
      //獲取文件頭信息
      FileUtils.getFileInfo(multipartFile, fileContent);
      try {
        //上傳文件
        multipartFile.transferTo(new File("F:\\text.log"));
        //獲取文件內(nèi)容
        fileContent.append(FileUtils.getFileContentByLine(multipartFile.getInputStream()));
      }catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    //5、返回文件信息和內(nèi)容
    String content = fileContent.toString();
    content = content.replace("times", (System.currentTimeMillis()-times) + "ms");
    return content;
  }

其中第一步獲取文件解析器對(duì)象應(yīng)該都清楚只要在容器中配置了對(duì)應(yīng)的對(duì)象我們就可以獲取到它,而它有根據(jù)上下文獲取的構(gòu)造函數(shù)就方便多了。

/**
   * Constructor for standalone usage. Determines the servlet container's
   * temporary directory via the given ServletContext.
   * @param servletContext the ServletContext to use
   */
  public CommonsMultipartResolver(ServletContext servletContext) {
    this();
    setServletContext(servletContext);
  }

然后根據(jù)request判斷是否還有上傳文件的表單,如果不是肯定直接返回,我們看看源碼中是怎么判斷的。

//CommonsMultipartResolver.class 主要判斷request是否為空
@Override
public boolean isMultipart(HttpServletRequest request) {
  return (request != null && ServletFileUpload.isMultipartContent(request));
}  
//ServletFileUpload 主要判斷是否是post方法,因?yàn)樯蟼魑募仨毷莗ost提交,其實(shí)我們可以在我們自定義controller中的方法指定訪(fǎng)問(wèn)
public static final boolean isMultipartContent(HttpServletRequest request) {
  if (!POST_METHOD.equalsIgnoreCase(request.getMethod())) {
      return false;
    }
    return FileUploadBase.isMultipartContent(new ServletRequestContext(request));
}
//FileUploadBase.class 如果請(qǐng)求是MULTIPART 則返回true
public static final boolean isMultipartContent(RequestContext ctx) {
    String contentType = ctx.getContentType();//類(lèi)似:multipart/form-data; boundary=----WebKitFormBoundaryLF3eM94lDB0ocQxT
    if (contentType == null) {
      return false;
    }
    if (contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART)) {
      return true;
    }
    return false;
}

所以如果request是上傳文件的請(qǐng)求對(duì)象,則進(jìn)行第二步。將request轉(zhuǎn)換成多文件請(qǐng)求對(duì)象,然后獲取存放文件的map。

可想而知這種方法效率是比第一種要低的,因?yàn)樗闅v文件map,但是在Spring MVC常用的卻是這種方法。

效果圖如下:

利用Spring MVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能

其中FileUtils.java代碼如下:

package com.yuanfy.monitorsite.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.springframework.web.multipart.MultipartFile;

/**
 * @Description: 文件工具類(lèi)方法
 * @author yuanfy
 * @date 2017年9月15日 下午2:45:40 
 * @version 1.0
 */
public class FileUtils {
  /**
   * @Description: 獲取文件信息
   * @param file CommonsMultipartFile類(lèi)型的文件
   * @param fileContent StringBuilder,封裝文件信息
   * @author yuanfy
   * @date 2017年9月15日 下午2:51:34 
   * @version 1.0
   */
  public static void getFileInfo(MultipartFile file, StringBuilder fileContent) {
    fileContent.append("文件名稱(chēng):\t\t").append(file.getName()).append("\n")
      .append("文件原始名稱(chēng):\t").append(file.getOriginalFilename()).append("\n")
      .append("文件大小:\t\t").append(file.getSize()).append("\n")
      .append("文件類(lèi)型:\t\t").append(file.getContentType()).append("\n")
      .append("讀取文件時(shí)長(zhǎng):\t times").append("\n");
  }
  
  /**
   * @Description: 根據(jù)文件對(duì)象獲取文件內(nèi)容
   * @param file
   * @author yuanfy
   * @date 2017年9月15日 下午5:01:57 
   * @version 1.0
   * @throws IOException 
   * @throws FileNotFoundException 
   */
  public static String getFileContentByLine(File file) throws FileNotFoundException, IOException {
    return getFileContentByLine(new FileInputStream(file));
  }
  /**
   * @Description: 根據(jù)文件輸入流對(duì)象獲取文件內(nèi)容
   * @param in 文件輸入流對(duì)象
   * @author yuanfy
   * @date 2017年9月15日 下午5:01:57 
   * @version 1.0
   * @throws IOException 
   */
  public static String getFileContentByLine(InputStream in) throws IOException {
    StringBuilder fileContent = new StringBuilder();
    
    byte[] bytes = new byte[1024];
    int len = 0;
    while ((len = in.read(bytes)) != -1) {
      String content = new String(bytes, 0, len, "UTF-8");
      fileContent.append(content);
    }
    StreamUtils.close(in);
    return fileContent.toString();
  }
}

以上就是利用Spring MVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)名稱(chēng):利用SpringMVC怎么實(shí)現(xiàn)一個(gè)文件上傳功能
文章出自:http://www.yuzhuanjia.cn/article/jpgchg.html
主站蜘蛛池模板: av无码中文一区二区三区 | 91精品福利自产拍在线观看 | 国产波霸爆乳一区二区精品 | 午夜精品久久久久久久99热 | 午夜情深深| 国产av一区二区三区 | 97色伦影院 | av无码精品久久久 | 东京热无码人妻一区二区三av | A片人人澡C片人人人妻付费 | 爆乳一区二区无码 | 91亚洲一区二区在线观看不卡 | av鲁丝一区鲁丝二区鲁丝 | 91精品国产乱码久久 | 高潮歹无毛免费观看视频 | 国产wc商场女厕跟拍mp4 | 丰满人妻av无码一区二区三区 | www欧美视频 | av天堂午夜精品一区二区三 | 午夜欧美国产 | av喷水高潮喷水在线观看com | 91啪国产福利在线 | 午夜大胆福利视频 | 99精品在线视频 | 午夜福利精品短视频在线 | 99国产精品综合AV无码 | 99久久无码一区人妻a片潘金莲 | 午夜性福利| 国产aa免费视频观看网站 | 国产91麻豆免费观看 | 91精产品一区观看红桃视频 | 91麻豆精品国产9 | 一区二区三区好的精华液杨超越 | 午夜男女视频免费观看视频 | 国产aa免费视频观看 | 一区二区在线免费观看 | 丰满多毛少妇做爰 | 高潮射精日本韩国在线播放 | 国产99视频精品免 | 99精品国产福久久久久久 | 91制片厂果冻传媒首页 |