java blob 文件上传下载

1、文件上传

pojo中为byte[] 类型,数据库中对应为blob类型。

主要代码:

复制代码
FileInputStream fis = null;

fis = new FileInputStream(new File(filePath));
byte[] inputByte = input2byte(fis);
fileBean.setContent(inputByte);

/**
* 将 流 转换为byte
* @param inStream
* @return
* @throws IOException
*/
public static final byte[] input2byte(InputStream inStream) throws IOException { 
  ByteArrayOutputStream swapStream = null;
  try {
    swapStream = new ByteArrayOutputStream();
    byte[] buff = new byte[1024]; 
    int rc = 0; 
    while ((rc = inStream.read(buff, 0, 1024)) > 0) { 
      swapStream.write(buff, 0, rc); 
    } 
    return swapStream.toByteArray();
  } catch (Exception e) {
    logger.info(e.getStackTrace());
  } finally {
    if (swapStream != null) {
    safeClose(swapStream);
    }
  }
  return null;
} 
复制代码

2、文件下载

复制代码
@Override
public void downFileByBlob(HttpServletRequest request, HttpServletResponse response, String fileId) throws IOException {
  AtFileupload bean = hibernateDao.getObject(AtFileupload.class, fileId);
  if (bean.getContent() != null) {
    String filename= bean.getFileName();//获取日志中存储的文件名称
    String userAgent = request.getHeader("user-agent").toLowerCase(); 
    if (userAgent.contains("msie") || userAgent.contains("like gecko")) { 
    // IE 
      filename = URLEncoder.encode(filename, "UTF-8"); 
    } else { 
    // 非IE 
      filename = new String(filename.getBytes("UTF-8"), "iso-8859-1"); 
    } 
    try {
      byte[] fileStream = bean.getContent();
      // 以流的形式下载文件
        response.setContentType("application/x-msdownload");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment; filename=" + filename);
        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
        toClient.write(fileStream);
        toClient.flush();
        toClient.close();
      } catch (Exception e) {
        logger.info(e.getStackTrace());
      }
   }
}
复制代码
posted @   月眸  阅读(10159)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示