如何使用 Servlet 和 AJAX 下载 MySQL 的 BLOB?

发布于 2024-10-05 02:36:13 字数 185 浏览 1 评论 0原文

我正在使用 servlet 来访问 MySQL 数据。我已经有了将文件从 servlet 发送到响应的代码。

我不知道如何用 javascript 捕获它,因为我不是通过提交进行此调用。我不想重新加载漏洞页面。

我尝试向 servlet 创建一个 window.open,通过 URL 发送所有参数,但它只打开一个空白页面。

I'm using a servlet to access the MySQL data. I already have the code for sending the file from the servlet to the response.

What I don't know is how I'm supossed to catch it with javascript, because I'm not making this call by submit. I don't want to reload the hole page.

I tried making a window.open to the servlet, sending all the params by URL, but it only opens a blank page.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁憨憨 2024-10-12 02:36:13

好的,要下载该文件,我只需查询 blob 文件,然后:

try{
    ServletOutputStream output = response.getOutputStream();
    stmt = (Statement) c.createStatement();
  rs = stmt.executeQuery(query);
  if (rs.next()) {
    fl = (Blob) rs.getBlob(1);
  } else {
      System.out.println("No se pudo descargar el archivo");
  }

  InputStream in = fl.getBinaryStream();
  int length = (int) fl.length();

    response.reset();
    //response.setContentType("multipart/mixed");
    //if(rs.getString(3).toLowerCase().equals("mp3") || rs.getString(3).toLowerCase().equals("mpeg"))
        response.setContentType(getMime(rs.getString(2)));
    response.setHeader("Content-Length: ",Integer.toString(length));
    response.setHeader("Content-disposition","attachment; filename=" + rs.getString(2));

    byte[] buf = new byte[1024];

while ((length = in.read(buf)) > 0){
    output.write(buf, 0, length);
}
    output.close();
    in.close();
    rs.close();
        }catch(Exception e){
            e.printStackTrace();
        }

Ok, to download the file, I just query the blob file and then:

try{
    ServletOutputStream output = response.getOutputStream();
    stmt = (Statement) c.createStatement();
  rs = stmt.executeQuery(query);
  if (rs.next()) {
    fl = (Blob) rs.getBlob(1);
  } else {
      System.out.println("No se pudo descargar el archivo");
  }

  InputStream in = fl.getBinaryStream();
  int length = (int) fl.length();

    response.reset();
    //response.setContentType("multipart/mixed");
    //if(rs.getString(3).toLowerCase().equals("mp3") || rs.getString(3).toLowerCase().equals("mpeg"))
        response.setContentType(getMime(rs.getString(2)));
    response.setHeader("Content-Length: ",Integer.toString(length));
    response.setHeader("Content-disposition","attachment; filename=" + rs.getString(2));

    byte[] buf = new byte[1024];

while ((length = in.read(buf)) > 0){
    output.write(buf, 0, length);
}
    output.close();
    in.close();
    rs.close();
        }catch(Exception e){
            e.printStackTrace();
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文