0

MongoDBからExtJSに画像を送信しようとするJavaサーブレットがあります。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String action = req.getParameter("action");

    if (action != null && action.equals("download")) {

        resp.setContentType("text/html");
        resp.setHeader("Content-Disposition", "attachment;filename=" + "images.jpg");

        try {
            DB db = DataBaseMongoService.getDb("forum_images"); //class that manages Mongo DB access
            GridFS gfs = new GridFS(db, "image");
            GridFSDBFile imageForOutput = gfs.findOne("images.jpg");

            InputStream in = imageForOutput.getInputStream();

            ServletOutputStream out = resp.getOutputStream();
            out.write(IOUtils.toByteArray(in));
            out.flush();
            in.close();
            out.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

私のExtJS呼び出しは次のようになります。

Ext.Ajax.request({
url: 'ForumImageServlet',
method: 'GET',
params: {
    action: 'download'
},});

応答は、次のような画像のバイトストリームです。

����JFIF��� "" $(4,$&1'-=-157:::#+?D?8C49:77%w777777777777777777777777777777777777777777777777��Pp"��ï...

サーブレットへの応答として実際の画像を取得するにはどうすればよいですか?前もって感謝します!

4

3 に答える 3

1

なぜあなたはに設定ContentTypetext/htmlますか?

使ってみてくださいimage/jpg

于 2013-03-27T06:52:54.713 に答える
0

最終的な解決策は、バイトストリームをbase64にエンコードすることでした。

            byte[] buf = IOUtils.toByteArray(in);

        String prefix = "{\"url\":\"data:image/jpeg;base64,";
        String postfix = "\"}";
        String fileJson = prefix + Base64.encodeBytes(buf).replaceAll("\n", "") + postfix; 
        PrintWriter out = resp.getWriter();
        out.write(fileJson);
        out.flush();
        in.close();
        out.close();
于 2013-03-27T11:25:13.340 に答える
0

ajaxリクエストを使用する代わりに、src属性を使用してimg-tagを挿入できます。正しいmimeタイプを指定すると、ブラウザが画像をロードします

于 2013-03-27T19:52:12.110 に答える