2

Base64エンコーディングでxmlを返すサーブレット(拡張子は.groovy)を作成しました

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String fileName=(String) request.getParameter("fileName")

    if (fileName == null || fileName.equals(""))throw new ServletException("Invalid or non-existent file parameter in SendXml servlet.")
    if (fileName.indexOf(".xml") == -1)fileName = fileName + ".xml"

    System.out.println(fileName)

    try {

      String relativeWebPath = "/WEB-INF/classes/com/abc/csm/xml/"+fileName
      String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath)

      String fileContents=new File(absoluteDiskPath).text
      response.setContentType("text/xml")
      response.addHeader("Content-Disposition", "attachment filename="+ fileName)

      XmlHandler xm=new XmlHandler()

      PrintWriter out = response.getWriter()
      String enxml=xm.encodeBase64(fileContents)
      response.setContentLength((int) enxml.length)

      out.println(enxml)
      out.close()
      out.flush()
    } catch (Exception e) {       println e     } 
}

XmlHandlerencodeBase64メソッド

def encodeBase64(String text) {
    return new String(Base64.encodeBase64(text.getBytes()))
}

しかし、私は何かが欠けていると思います。助けてください

アップデート

また、パッケージからファイルにアクセスするのは適切な方法ですか?

4

1 に答える 1

4

置き換えることができます:

  String enxml=xm.encodeBase64(fileContents)

  String enxml = fileContents.bytes.encodeBase64()

または、次の呼び出しにエンコーディングを渡すことをお勧めしますgetBytes

  String enxml = fileContents.getBytes( 'UTF-8' ).encodeBase64()

また、ヘッダーの後にセミコロンがないようですattachment...行は次のようになります。

  response.addHeader( "Content-Disposition", "attachment; filename=$fileName" )

編集、およびエンコードとデコードの例:

エンコード:

String encoded = "tim_yates".getBytes( 'UTF-8' ).encodeBase64()

デコード:

String original = new String( encoded.decodeBase64(), 'UTF-8' )
assert original == 'tim_yates'
于 2012-05-03T08:13:57.193 に答える