1

Excel/zip ファイルを運用サーバーからローカル マシンにダウンロードするためのサーブレット コードがあります。本番サーバーで [保存] または [開く] ボタンをクリックすると、ClientAbortException がスローされます。同じコードが Dev と UAT でうまく機能します。また、このエラーは常に表示されるわけではありません。以下は同じコードです -

        response.setContentType("application/download"); 
        response.setHeader("Content-Disposition", "attachment; filename= \""+ fileName +"\""); 
        fin = new FileInputStream(f);
        int size = fin.available();
        response.setContentLength(size); 
        byte[] ab = new byte[size];

        os = response.getOutputStream();

        int bytesread;

        do{
            bytesread = fin.read(ab,0,size);
            if(bytesread >-1) { 
                os.write(ab,0,bytesread );
            }
        } while(bytesread >-1);
        os.flush();
        os.close(); 
4

1 に答える 1

0

HTML ファイアウォール デバイスに違反している可能性があります。これは、本番環境には存在するものの、テスト環境には存在しないものです。

また、コードはうまくスケーリングできません。500 人のユーザー全員が同時に 50 MB のファイルをダウンロードしようとすると、サーバーはどうなりますか?

次のようなスケーラブルなループを構築できます。

byte[] buffer = new byte[bufferSize];
int bytesRead = input.read(buffer);
while (bytesRead > 0) {
    output.write(buffer, 0, bytesRead);
    bytesRead = input.read(buffer);
}

適切なbufferSizeを選択してください。たとえば 20480 程度です。

于 2013-09-10T08:00:31.160 に答える