2016-05-19 11 views
0

イメージをアップロードしようとしています。画像が小さい場合は、簡単にアップロードされます。しかし、私が高品質の大きな壁紙をアップロードしようとすると、それは永遠にかかります。それはアップロード89%を示し、そのようなままです。 Apache Commons apiを使用してファイルをアップロードし、Inputstreamを使用して読んでいます。ここに私のコードサンプルがあります:Javaアプリケーションで大きなイメージ/ファイルをアップロードする

ServletFileUpload upload = new ServletFileUpload(); 
    response.setContentType("image/jpeg"); 
    FileItemIterator iterator = upload.getItemIterator(request); 
    while (iterator.hasNext()) { 
     FileItemStream item = iterator.next(); 
     InputStream stream = item.openStream(); 
     if (item.isFormField()) { 
      LOGGER.debug("Got a form field: " + item.getFieldName()); 
     } else { 
      LOGGER.debug("Got an uploaded file: " + item.getFieldName() + ", name = " + item.getName()); 
      byte[] buf = new byte[stream.available()]; 
      ServletOutputStream outputstream = response.getOutputStream(); 
      while ((stream.read(buf)) != -1) { 
       outputstream.write(buf, 0, buf.length); 
      } 
      outputstream.close(); 
      stream.close(); 
     } 
    } 

私は上記のコードを使用してイメージを迅速にアップロードする方法はありますか?それを世話するapisはありますか?私はどんな助けにも感謝します。ありがとう。

答えて

0

大きなファイルのサイズとJVMの最大ヒープサイズを明示できますか? (-Xmx javaオプション)

あなたのJVMが画像を正しく管理するのに十分なメモリを確保できないことがあります。 ヒープサイズの値をファイルサイズよりも大きくすることが基本的な解決策の1つです。

0

sizeを指定するstream.availableでバイト配列を割り当てるelseブロックのコードのため、OOMを取得していると思います。使用可能なInputStreamsメソッドのjavadocsを読み取った場合、使用可能なメソッドはストリーム内の合計バイト数も返す可能性があります。したがって、バッファの割り当てに使用しないでください。あなたは小さな固定サイズのバッファを使うべきでしょうか。

関連する問題