欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java大文件上傳詳解及實(shí)例代碼

 更新時(shí)間:2017年02月09日 15:58:59   投稿:lqh  
這篇文章主要介紹了Java大文件上傳詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

Java大文件上傳詳解

前言:

上周遇到這樣一個(gè)問(wèn)題,客戶上傳高清視頻(1G以上)的時(shí)候上傳失敗。

一開始以為是session過(guò)期或者文件大小受系統(tǒng)限制,導(dǎo)致的錯(cuò)誤。查看了系統(tǒng)的配置文件沒(méi)有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但還是不行,有時(shí)候10分鐘就崩了。

同事說(shuō),可能是客戶這里服務(wù)器網(wǎng)絡(luò)波動(dòng)導(dǎo)致網(wǎng)絡(luò)連接斷開,我覺(jué)得有點(diǎn)道理。但是我在本地測(cè)試的時(shí)候發(fā)覺(jué)上傳也失敗,網(wǎng)絡(luò)原因排除。

看了日志,錯(cuò)誤為:

java.lang.OutOfMemoryError Java heap space

上傳文件代碼如下:

public static String uploadSingleFile(String path,MultipartFile file) {
   
  if (!file.isEmpty()) {
     
      byte[] bytes;
      try {
        bytes = file.getBytes();
         
        // Create the file on server
        File serverFile = createServerFile(path,file.getOriginalFilename());
        BufferedOutputStream stream = new BufferedOutputStream(
            new FileOutputStream(serverFile));
        stream.write(bytes);
        stream.flush();
        stream.close();
 
        logger.info("Server File Location="
            + serverFile.getAbsolutePath());
 
        return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
      }
     
  }else{
    System.out.println("文件內(nèi)容為空");
  }
  return null;  
}

乍一看沒(méi)什么大問(wèn)題,我在 stream.write(bytes); 這句加了斷點(diǎn),發(fā)覺(jué)根本就沒(méi)走到。而是在 bytes = file.getBytes(); 就報(bào)錯(cuò)了。

原因應(yīng)該是文件太大的話,字節(jié)數(shù)超過(guò)Integer(Bytes[]數(shù)組)的最大值,導(dǎo)致的問(wèn)題。

既然這樣,把文件一點(diǎn)點(diǎn)的讀進(jìn)來(lái)即可。

修改上傳代碼如下:

public static String uploadSingleFile(String path,MultipartFile file) {
   
  if (!file.isEmpty()) {
     
      //byte[] bytes;
      try {
        //bytes = file.getBytes();
         
        // Create the file on server
        File serverFile = createServerFile(path,file.getOriginalFilename());
        BufferedOutputStream stream = new BufferedOutputStream(
            new FileOutputStream(serverFile));
        int length=0;
        byte[] buffer = new byte[1024];
        InputStream inputStream = file.getInputStream();
        while ((length = inputStream.read(buffer)) != -1) {
          stream.write(buffer, 0, length);
        }
        //stream.write(bytes);
        stream.flush();
        stream.close();
 
        logger.info("Server File Location="
            + serverFile.getAbsolutePath());
 
        return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
      }
     
  }else{
    System.out.println("文件內(nèi)容為空");
  }
  return null;  
}

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • java selenium教程環(huán)境搭建方法

    java selenium教程環(huán)境搭建方法

    本文主要介紹java selenium 環(huán)境搭建,這里詳細(xì)介紹了selenium的安裝環(huán)境搭建,有興趣的小伙伴可以參考下
    2016-08-08
  • java導(dǎo)出到excel常用的幾種方式總結(jié)

    java導(dǎo)出到excel常用的幾種方式總結(jié)

    導(dǎo)出excel是咱Java開發(fā)的必備技能啦,之前項(xiàng)目有這個(gè)功能,現(xiàn)在將其獨(dú)立出來(lái),分享一下,下面這篇文章主要給大家介紹了關(guān)于java導(dǎo)出到excel常用的幾種方式,需要的朋友可以參考下
    2023-05-05
  • Java中的線程安全問(wèn)題詳細(xì)解析

    Java中的線程安全問(wèn)題詳細(xì)解析

    這篇文章主要介紹了Java中的線程安全問(wèn)題詳細(xì)解析,線程安全是如果有多個(gè)線程在同時(shí)運(yùn)行,而這些線程可能會(huì)同時(shí)運(yùn)行這段代碼,程序每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的是一樣的,此時(shí)我們就稱之為是線程安全的,需要的朋友可以參考下
    2023-11-11
  • Springboot應(yīng)用中線程池配置詳細(xì)教程(最新2021版)

    Springboot應(yīng)用中線程池配置詳細(xì)教程(最新2021版)

    這篇文章主要介紹了Springboot應(yīng)用中線程池配置教程(2021版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java的string類為什么是不可變的

    Java的string類為什么是不可變的

    這篇文章主要介紹了Java的string類為什么是不可變的,總結(jié)了三個(gè)答案,需要的朋友可以參考下
    2014-04-04
  • 解決Java中OutOfMemoryError的問(wèn)題

    解決Java中OutOfMemoryError的問(wèn)題

    這篇文章主要介紹了解決Java中OutOfMemoryError的三種方法,需要的朋友可以參考下
    2015-09-09
  • Spring中@RequestMapping、@RestController和Postman

    Spring中@RequestMapping、@RestController和Postman

    本文介紹了Spring框架中常用的@RequestMapping和@RestController注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Java?web訪問(wèn)http://localhost:8080/xx/xx.jsp報(bào)404錯(cuò)誤問(wèn)題的解決方法

    Java?web訪問(wèn)http://localhost:8080/xx/xx.jsp報(bào)404錯(cuò)誤問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于Java?web訪問(wèn)http://localhost:8080/xx/xx.jsp報(bào)404錯(cuò)誤問(wèn)題的解決方法,很多小伙伴在剛開始用Springboot整合jsp開發(fā)時(shí)都會(huì)遇到這個(gè)問(wèn)題, 按照別人的教程一步一步搭建,但就是會(huì)報(bào)404,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 使用Feign調(diào)用注解組件(實(shí)現(xiàn)字段賦值功能)

    使用Feign調(diào)用注解組件(實(shí)現(xiàn)字段賦值功能)

    這篇文章主要介紹了使用Feign調(diào)用注解組件(實(shí)現(xiàn)字段賦值功能),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java深入講解二十三種設(shè)計(jì)模式之中的策略模式

    Java深入講解二十三種設(shè)計(jì)模式之中的策略模式

    策略模式屬于Java 23種設(shè)計(jì)模式中行為模式之一,該模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。本文將通過(guò)示例詳細(xì)講解這一模式,需要的可以參考一下
    2022-05-05

最新評(píng)論