如何动态设置setContentType(“ text / html”)或setContentType(“ text / plain”)

时间:2019-09-10 15:57:49

标签: java html servlets text mime-types

我需要修改读取文本文件的代码,以动态方式读取文本或html文件。

现在代码仅使用

  

response.setContentType(“ text / plain”);

因为该文件以文本格式保存。但是我想以html格式保存以管理所有标记并具有更好的视图,但是如果我在

中进行修改
  

response.setContentType(“ text / html”);

所有另存为文本的文件查看器错误

我的代码是:

package uk.co.mycode.fax.controller;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import uk.co.mycode.fax.dao.mycodeFaxDAO;
import uk.co.mycode.fax.domain.Image;
import uk.co.morpheus.logging.Logger;

public class FaxImageRequest
  extends HttpServlet
{
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { performTask(request, response); }

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { performTask(request, response); }

  public void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String url = request.getParameter("U");
    if (url == null || url.length() < 1) {
      url = request.getParameter("URL");
    }
    Logger.log(4, getClass().getName(), "<**** Entered FaxImageRequest (" + url + ") ****>");
    try {
      Cookie[] cookies = request.getCookies();
      String userId = "";
      if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
          if (cookies[i].getName().equals("IMPS3IAuserid")) {
            userId = cookies[i].getValue();

            break;
          } 
        } 
      }
      if (userId.length() < 1) {
        userId = "NOT LOGGED ON";
      }

      mycodeFaxDAO dao = mycodeFaxDAO.getInstance();

      Image image = dao.getImage(url);

      Logger.log(4, getClass().getName(), "Image: " + image);

      if (image != null) {
        ServletOutputStream out = response.getOutputStream();
        if (image.type.toLowerCase().startsWith("f")) {
            response.setContentType("image/tiff");
        } else {
//----------------------------------------------------------------------------

               response.setContentType("text/plain");

//----------------------------------------------------------------------------      
        } 

        for (int i = 0; i < image.bytes.length; ) { out.write(image.bytes, i, (image.bytes.length - i > 4096) ? 4096 : (image.bytes.length - i)); i += 4096; }

        dao.updateImageArchive(userId, request.getParameter("U"));
      } else {

        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
        pw.println("<HTML>");
        pw.println("<BODY>");
        pw.println("<B>No image found</B>");
        pw.println("</BODY>");
        pw.println("</HTML>");
        pw.close();
      } 
    } catch (Throwable th) {
      Logger.log(1, getClass().getName(), "Error during image read or update:" + th.getMessage());
      th.printStackTrace();
    } 

    Logger.log(4, getClass().getName(), "<**** Finished FaxImageRequest ****>");
  }
}

我试图写这个:

if (response.getContentType() == null) {
                response.setContentType("text/html");
              } else {
                    response.setContentType("text/plain");
              }

,但始终为null。 感谢您的支持。

1 个答案:

答案 0 :(得分:0)

如果我可以提出您的“托管平台”,正确的答案是通常在托管平台中更改此类设置。我已经使用GCS(Google云服务器)托管了三个不同的网络域,因为它(大部分)是免费的。

在Google Cloud中,当您保存文件时,通常会根据文件的扩展名-.txt或.html来识别您保存的文件类型(内容类型)。可以使用鼠标在Google的存储桶文件浏览器GUI中更改Content-Type设置。也可以使用GSUTIL命令行程序在命令行上手动更改。

您可以使用Java的外壳执行库(用于调用UNIX Shell命令的Java标准库例程)从Java调用GSUTIL。这就是我的工作...

...但是您甚至可以下载Google的Java Jar文件来访问GCS,并对GCS进行基于Java的调用,以执行诸如更改存储桶文件的内容类型的操作。...

如果您使用的是MSFT Azure或GoDaddy或其他工具,则将有所不同。