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

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

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

Java大文件上傳詳解

前言:

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

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

同事說(shuō),可能是客戶(hù)這里服務(wù)器網(wǎng)絡(luò)波動(dòng)導(dǎo)致網(wǎng)絡(luò)連接斷開(kāi),我覺(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實(shí)現(xiàn)學(xué)生信息錄入界面

    java實(shí)現(xiàn)學(xué)生信息錄入界面

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息錄入界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 據(jù)說(shuō)這個(gè)是可以擼到2089年的idea2020.2(推薦)

    據(jù)說(shuō)這個(gè)是可以擼到2089年的idea2020.2(推薦)

    這篇文章主要介紹了據(jù)說(shuō)這個(gè)是可以擼到2089年的idea2020.2,本教程給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列簡(jiǎn)單定義與用法示例

    Java數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列簡(jiǎn)單定義與用法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列簡(jiǎn)單定義與用法,簡(jiǎn)要描述了循環(huán)隊(duì)列的概念、原理,并結(jié)合實(shí)例形式分析了java循環(huán)隊(duì)列的定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • SpringBoot中實(shí)現(xiàn)代理方式

    SpringBoot中實(shí)現(xiàn)代理方式

    這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)代理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • RxJava+Retrofit+Mvp實(shí)現(xiàn)購(gòu)物車(chē)

    RxJava+Retrofit+Mvp實(shí)現(xiàn)購(gòu)物車(chē)

    這篇文章主要為大家詳細(xì)介紹了RxJava+Retrofit+Mvp實(shí)現(xiàn)購(gòu)物車(chē)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 詳解SpringBoot如何優(yōu)雅的進(jìn)行測(cè)試打包部署

    詳解SpringBoot如何優(yōu)雅的進(jìn)行測(cè)試打包部署

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何優(yōu)雅的進(jìn)行測(cè)試打包部署,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 圖文詳解Java中class的初始化順序

    圖文詳解Java中class的初始化順序

    網(wǎng)上有很多關(guān)于Java中class的初始化順序文章,但是本文通過(guò)圖文更加詳細(xì)的介紹了Java中class的初始化順序,并對(duì)class的裝載順序進(jìn)行了講解,下面一起來(lái)看看。
    2016-08-08
  • Java設(shè)計(jì)模式之java責(zé)任鏈模式詳解

    Java設(shè)計(jì)模式之java責(zé)任鏈模式詳解

    這篇文章主要介紹了JAVA 責(zé)任鏈模式的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2021-09-09
  • Windows下如何安裝配置Redis環(huán)境

    Windows下如何安裝配置Redis環(huán)境

    這篇文章主要介紹了Windows下如何安裝配置Redis環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中double數(shù)值保留兩位小數(shù)的4種實(shí)現(xiàn)方式舉例

    Java中double數(shù)值保留兩位小數(shù)的4種實(shí)現(xiàn)方式舉例

    在Java編程中,我們經(jīng)常遇到需要對(duì)double類(lèi)型的浮點(diǎn)數(shù)進(jìn)行精確截?cái)嗷蛩纳嵛迦氡A魞晌恍?shù)的需求,這篇文章主要給大家介紹了關(guān)于Java中double數(shù)值保留兩位小數(shù)的4種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

手机| 泰顺县| 宁阳县| 东城区| 松溪县| 岑溪市| 罗城| 贵州省| 山丹县| 巩义市| 揭阳市| 平江县| 那坡县| 威远县| 盘锦市| 涟源市| 闻喜县| 天等县| 景谷| 贡山| 龙南县| 秦安县| 水城县| 轮台县| 新巴尔虎右旗| 荥阳市| 边坝县| 临武县| 长泰县| 八宿县| 伊吾县| 赣州市| 铅山县| 将乐县| 界首市| 高密市| 靖安县| 屏南县| 武宁县| 伊川县| 长葛市|