0

Javaを使用して.msiファイルをダウンロードしたい。次のコードを使用してファイルをダウンロードしようとしました

PrintWriter out = null;
FileInputStream fileToDownload = null;
BufferedReader bufferedReader = null;
try {
        out = response.getWriter();
        fileToDownload = new FileInputStream(DOWNLOAD_DIRECTORY + FILE_NAME);
        bufferedReader = new BufferedReader(new InputStreamReader(fileToDownload));

        //response.setContentType("application/text");
        //response.setContentType("application/x-msi");
        //response.setContentType("application/msi");
        //response.setContentType("octet-stream");
        response.setContentType("application/octet-stream");
        //response.setContentType("application/x-7z-compressed");
        //response.setContentType("application/zip");
        response.setHeader("Content-disposition","attachment; filename=" +FILE_NAME );
        response.setContentLength(fileToDownload.available());

        System.out.println("\n now file download is starting");
        String NextLine = "";
        while((NextLine = bufferedReader.readLine()) != null){
            out.println(NextLine);
        }
        out.flush();                                

    } catch (IOException e) {
        out.write("<center><h2>The Installer is not Available on Server</h2></center>");
        System.out.println("\n Got Exception while getting the input Stream from the file==>"+e);
        log.error("Error::", e);
    }
    finally{
        if(null != bufferedReader){
            try {
                bufferedReader.close();
            } catch (IOException e) {
                System.out.println("\n Error in closing buffer Reader==>"+e);
                log.error("Error::", e);
            }
        }// End of if

        if(null != fileToDownload){
            try {
                fileToDownload.close();
            } catch (IOException e) {
                System.out.println("\n Error in closing input stream==>"+e);
                log.error("Error::", e);
            }
        }// End of if
    }// End of finally          
4

1 に答える 1

1

この場合、binary(msi)ファイルを読み取ることはできませんreadline()。コードが完全に間違っているため、機能しません。これがあなたがやりたいことをすることができる簡単な関数です。

    private void doDownload( HttpServletRequest req, HttpServletResponse resp,String filename, String original_filename )throws IOException
            {
            File f = new File(filename);
            int  length   = 0;
            ServletOutputStream op = resp.getOutputStream();
            ServletContext context  = getServletConfig().getServletContext();
            String  mimetype = context.getMimeType( filename );
            resp.setContentType( (mimetype != null) ? mimetype : "application/octet-stream" );
            resp.setContentLength( (int)f.length() );
            resp.setHeader( "Content-Disposition", "attachment; filename=\"" + original_filename + "\"" );
            byte[] bbuf = new byte[BUFSIZE];
            DataInputStream in = new DataInputStream(new FileInputStream(f));
            while ((in != null) && ((length = in.read(bbuf)) != -1)){
            op.write(bbuf,0,length);
            }
            in.close();
            op.flush();
            op.close();
        }

doDownload()で関数を作成し、必要なパラメータを、、または任意の有効な場所servletからその関数に渡します。doGetdoPost

パラメーター:

  • @paramreqリクエスト

  • @paramresp応答

  • @paramfilenameダウンロードするファイルの名前。

  • @paramoriginal_filenameブラウザが受け取る名前。

于 2012-06-29T11:11:02.670 に答える