如何改写Jfinal的render方法,使字符串直接转换为文件下载?
- 内容介绍
- 文章标签
- 相关推荐
本文共计356个文字,预计阅读时间需要2分钟。
重写JFinal中的render方法,实现字符串直接转换为文件下载功能:
javapackage com.youka.tools;
import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;
public class StringToFileDownload { public static void render(String content, String fileName) { byte[] bytes=content.getBytes(); ByteArrayInputStream bis=new ByteArrayInputStream(bytes); BufferedInputStream bufferedInputStream=new BufferedInputStream(bis); response.setHeader(Content-Disposition, attachment;filename= + fileName); response.setContentType(application/octet-stream); int count; byte[] buffer=new byte[1024]; try { while ((count=bufferedInputStream.read(buffer)) !=-1) { out.write(buffer, 0, count); } } catch (IOException e) { e.printStackTrace(); } finally { try { bufferedInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }}
重写jfinal中的render方法 为了实现字符串直接转换为文件给浏览器下载package com.youka.tools; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.jfinal.kit.LogKit; import com.jfinal.render.Render; import com.jfinal.render.RenderException; /** * 重写jfinal中的render方法 为了实现字符串直接转换为文件给浏览器下载 * * @author symbol * */ public class BinaryRender extends Render { private InputStream in; private String fileName; public BinaryRender(byte[] bytes, String fileName) { in = new ByteArrayInputStream(bytes); this.fileName = fileName; } public BinaryRender(InputStream in, String fileName) { this.in = in; this.fileName = fileName; } @Override public void render() { OutputStream outputStream = null; InputStream inputStream = null; try { response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes(getEncoding()), "ISO8859-1")); String contentType = request.getSession().getServletContext().getMimeType(fileName); response.setContentType(contentType != null ? contentType : "application/octet-stream"); inputStream = new BufferedInputStream(in); outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; for (int len = -1; (len = in.read(buffer)) != -1;) { outputStream.write(buffer, 0, len); } outputStream.flush(); } catch (IOException e) { if (getDevMode()) { throw new RenderException(e); } } catch (Exception e) { throw new RenderException(e); } finally { if (inputStream != null) try { inputStream.close(); } catch (IOException e) { LogKit.error(e.getMessage(), e); } if (outputStream != null) try { outputStream.close(); } catch (IOException e) { LogKit.error(e.getMessage(), e); } } } }
本文共计356个文字,预计阅读时间需要2分钟。
重写JFinal中的render方法,实现字符串直接转换为文件下载功能:
javapackage com.youka.tools;
import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;
public class StringToFileDownload { public static void render(String content, String fileName) { byte[] bytes=content.getBytes(); ByteArrayInputStream bis=new ByteArrayInputStream(bytes); BufferedInputStream bufferedInputStream=new BufferedInputStream(bis); response.setHeader(Content-Disposition, attachment;filename= + fileName); response.setContentType(application/octet-stream); int count; byte[] buffer=new byte[1024]; try { while ((count=bufferedInputStream.read(buffer)) !=-1) { out.write(buffer, 0, count); } } catch (IOException e) { e.printStackTrace(); } finally { try { bufferedInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }}
重写jfinal中的render方法 为了实现字符串直接转换为文件给浏览器下载package com.youka.tools; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.jfinal.kit.LogKit; import com.jfinal.render.Render; import com.jfinal.render.RenderException; /** * 重写jfinal中的render方法 为了实现字符串直接转换为文件给浏览器下载 * * @author symbol * */ public class BinaryRender extends Render { private InputStream in; private String fileName; public BinaryRender(byte[] bytes, String fileName) { in = new ByteArrayInputStream(bytes); this.fileName = fileName; } public BinaryRender(InputStream in, String fileName) { this.in = in; this.fileName = fileName; } @Override public void render() { OutputStream outputStream = null; InputStream inputStream = null; try { response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes(getEncoding()), "ISO8859-1")); String contentType = request.getSession().getServletContext().getMimeType(fileName); response.setContentType(contentType != null ? contentType : "application/octet-stream"); inputStream = new BufferedInputStream(in); outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; for (int len = -1; (len = in.read(buffer)) != -1;) { outputStream.write(buffer, 0, len); } outputStream.flush(); } catch (IOException e) { if (getDevMode()) { throw new RenderException(e); } } catch (Exception e) { throw new RenderException(e); } finally { if (inputStream != null) try { inputStream.close(); } catch (IOException e) { LogKit.error(e.getMessage(), e); } if (outputStream != null) try { outputStream.close(); } catch (IOException e) { LogKit.error(e.getMessage(), e); } } } }

