0

我正在尝试在同一页面中显示多种内容类型(文本/html 和图像/png 内联图像)。我在我们的磁盘/数据库中存储了图像内容和 text/html 内容以及所有标头信息(基本上假设我可以使用 InputStream 读取 text/html 和图像的内容)。我想创建一个包含 text/html 部分和内联图像部分的 HttpResponse。我遇到了一些对 HttpClient/MultipartEntity 的引用。所以我尝试了一个示例代码来使用 MultipartEntity 显示图像(保存在我的磁盘中),但我在页面中看到的都是乱码。我在构建路径中引用的 jar 是 apache-mime4j-0.6.jar、httpcore-4.0.1.jar、httpmime-4.0.jar。我正在使用 apache tomacat 服务器。下面是示例代码。

import java.io.*;
import java.nio.charset.Charset;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.InputStreamBody;


public class MyHelloWorldServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {

        ServletOutputStream out = response.getOutputStream();
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName("UTF-8"));
        //File file = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\test.msg");
        File file = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
        InputStream in1 = new FileInputStream(file);
        InputStreamBody fileBody1 = new InputStreamBody(new FileInputStream(file), "Chrysanthemum.jpg");
        entity.addPart("part1", fileBody1);
        entity.writeTo(out);

    }
}

也有人可以让我知道是否可以以类似的方式添加多种内容类型的部分并显示?

4

1 回答 1

1

也许我没有让你正确。您似乎想要创建一个具有相同映射来处理不同类型请求的 servlet?我对吗?如果这是正确的,为什么不根据数据库中的标题更改内容类型。

            response.setContentType("image/jpg");
            response.setContentType("text/html");

然后根据您要服务的内容,您可以将其用于图像或文件:对于 html:

  response.setContentType("text/html");   
  PrintWriter out = res.getWriter();  
  out.println("<html>....</html>");
  out.close();

图像:

    ServletOutputStream stream = null;
    BufferedInputStream buf = null;
    try{

            stream = response.getOutputStream();
            File mp3 = new File("path/tofile ");

            if(request.getSession().getAttribute( "path" )!=null){      
                 mp3 = new File(request.getSession().getAttribute( "path" ).toString());
                 request.getSession().setAttribute("path", null);
            } 

            response.setContentType("image/jpg");        
            response.setContentLength( (int) mp3.length() );

            FileInputStream input = new FileInputStream(mp3);
            buf = new BufferedInputStream(input);
            int readBytes = 0;

            while((readBytes = buf.read()) != -1)
               stream.write(readBytes);

   } catch (IOException ioe){       
      throw new ServletException(ioe.getMessage());           
   } finally {
       if(stream != null)
           stream.close();
       if(buf != null)
           buf.close();
   }   
于 2012-10-09T10:03:36.623 回答