ソリューションVUEアップロードフォルダ

 先週は、アップロードが失敗したときに、高精細ビデオ(上記1G)をアップロードするためにこのような問題、顧客に遭遇しました。当初、私はそれがセッションにエラーが生じ、システムが期限切れになるか、またはファイルサイズの制限だと思いました。システム構成ファイルは、ファイルサイズの制限が表示されていない確認し、seesiontimeout内のweb.xmlは30ですが、私は120にそれを置きます。しかし、それは解散し、時には、10分には動作しません。同僚は、ネットワーク接続によって引き起こされ、ここで、クライアント・サーバ・ネットワークであってもよい変動が失われて、私はほとんど意味を感じる、と言います。しかし、私はまた、ときに、ローカルテスト、除外のためのネットワーク上の理由から失敗したアップロードできる見つけました。エラーとソウ、以下の通りである:java.lang.OutOfMemoryErrorをJavaのヒープ領域のアップロードファイルのコードは次のとおりです。(File.isEmpty()!)公共の静的な文字列uploadSingleFile(文字列のパス、MultipartFileファイル)ならば{バイト[]バイト;試し{バイト= file.getBytes(); //サーバーのファイルにファイルを作成しますserverFile = createServerFile(パス、file.getOriginalFilename());なBufferedOutputStreamストリームは=新しいBufferedOutputStreamが(新しいのFileOutputStream(serverFile)); stream.write(バイト)。stream.flush(); stream.close(); logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath());リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace();のSystem.out.println(e.getMessage());}}他{するSystem.out.printlnは( "ファイルが空です。" );}戻りNULL;}一見、大した問題、でI stream.write(バイト);でも文プラスブレークポイントを移動していませんでした。代わりにバイト= file.getBytes()。エラーの。ファイルでなければならない理由は、バイト数が最大の整数(バイト[]配列)、生じる問題を超えて、大きすぎます。この場合、ファイルは、時間の少しは来ることができます。以下のように変更されたコードはアップロードする:公共の静的な文字列uploadSingleFile(文字列のパス、MultipartFileファイル)ならば{//バイト[]バイト;試し{//バイト= file.getBytes(); //作成します(file.isEmptyを()!)なBufferedOutputStreamストリーム=新たなBufferedOutputStream(新たFileOutputStream(serverFile));サーバファイルserverFile = createServerFile(パス、file.getOriginalFilename())上のファイルINT長= 0、バイト[]バッファ=新しいバイト[1024]; InputStream InputStreamは=ファイル.getInputStream();一方、((長さ= inputStream.read(バッファ))!= -1){stream.write(バッファ、0、長さ)。} //stream.write(bytes)。stream.flush(); stream.close(); logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath()); リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace(); System.out.println(e.getMessage())。}} {他のSystem.out.println( "文件内容为空")。}はnullを返します。}效果展示:} //stream.write(bytes)。stream.flush(); stream.close(); logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath()); リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace(); System.out.println(e.getMessage())。}} {他のSystem.out.println( "文件内容为空")。}はnullを返します。}效果展示:} //stream.write(bytes)。stream.flush(); stream.close(); logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath()); リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace(); System.out.println(e.getMessage())。}} {他のSystem.out.println( "文件内容为空")。}はnullを返します。}效果展示:logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath()); リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace(); System.out.println(e.getMessage())。}} {他のSystem.out.println( "文件内容为空")。}はnullを返します。}效果展示:logger.info( "サーバーのファイルの場所=" + serverFile.getAbsolutePath()); リターンgetRelativePathFromUploadDir(serverFile).replaceAll( "\\\\"、 "/"); }キャッチ(IOExceptionを電子){// TODO自動生成されたcatchブロックe.printStackTrace(); System.out.println(e.getMessage())。}} {他のSystem.out.println( "文件内容为空")。}はnullを返します。}效果展示:



详细代码可以参考一下这篇文章:http://blog.ncmem.com/wordpress/2019/08/09/java%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0/


おすすめ

転載: www.cnblogs.com/songsu/p/12096201.html