-1

サーブレットでは、ディスクから画像ファイルを読み取り、それを Base64 にエンコードしてから、クライアントに送り返す必要がありました。iOS、Python、およびその他の種類のサンプルしか見つけられなかったので (基本的にはすべて同じ方法で行います)、他の人を助けるためにここにコードを投稿すると思いました;)

あぶない!ByteBufferこれは最大 2GB のファイルに対してのみ 機能するはずですint

4

2 に答える 2

1
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    FileInputStream in = null;
    try {
        File file = new File(getServletContext().getRealPath("/<thePath>/<fileName>"));
        ByteBuffer buff = ByteBuffer.wrap(new byte[(int)image.length() + (image.length() % 1024 > 0 ? 1024 : 0)]);
        byte[] b = new byte[1024]; 
        in = new FileInputStream(file);
        while(in.read(b) != -1) {
            buff.put(b);
        }
        response.getWriter().write(Base64.encode(buff.array()));
    } catch(Exception e) {
        String msg = "Fehler beim lesen des Bildes";
        LOG.log(Level.SEVERE, msg, e);
        response.sendError(500, msg);
        return;
    } finally {
        if(in != null) in.close();
    }
}

あぶない!ByteBufferこれは最大 2GB のファイルに対してのみ 機能するはずですint

于 2012-10-24T12:27:01.183 に答える
1

なぜそんなに複雑で、完全なイメージをメモリに読み込むのですか? はるかに簡単な解決策:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
    enc.encode(new FileInputStream("/path/to/file.whatever"), response.getOutputStream());
}
于 2012-10-24T13:01:35.160 に答える