如何将文件从 MySQL BLOB 下载发送给最终用户?

发布于 2024-10-17 06:27:22 字数 207 浏览 1 评论 0原文

如何将文件作为下载发送给最终用户?我已经实现了一个页面的表单提交,其中包含一列数据作为数据库的会话。这一列包括一个在 MySQL 数据库中以 BLOB 形式保存的文件。

当处理 actionforward 并使用带有 CV 的表的映射文件时,我可以通过 cv.getFileContent() 访问文件内容。我必须将数据逐字节发送给用户吗?如何提供文件下载?

How can I send a file as download to the enduser? I have implemented a form submission of a page with a column of data as session of the DB. This column includes one file which is saved as BLOB in a MySQL database.

When handling actionforward and using the mapping file for a table with CV's, I can access the file content by cv.getFileContent(). Do I have to send the data byte by byte to the user? How do I offer the file as a download?

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

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

发布评论

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

评论(1

小嗲 2024-10-24 06:27:22

您应该使用 servlet 作为下载机制。

使用 Get 或 Post 将表单提交到 Servlet,然后在 Servlet 类中相应地实现 doGet 或 doPost。

使用 Hibernate 将列作为字节数组获取。

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {

    //Getting data s byte Array;
    byte[] csvFile = daoService.getFile(id);

    resp.setContentType("text/csv");
    resp.setContentLength((int) csvFile.length());
    ServletOutputStream out;

    try {
        out = resp.getOutputStream();
        out.write(csvFile);
        out.flush();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        out.close();
        out.flush();
    }

}

希望有帮助。

更新:

这就是我映射byte[]的方式。

<property
    name="image"
    update="true"
    insert="true"
    not-null="false"
    unique="false"
    type="binary"
>
    <column name="image" />
</property>

You should use servlet as download mechanism.

Submit your form to Servlet using Get or Post,then in Servlet Class implement doGet or doPost accordingly.

Using Hibernate fetch the column as byte Array.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {

    //Getting data s byte Array;
    byte[] csvFile = daoService.getFile(id);

    resp.setContentType("text/csv");
    resp.setContentLength((int) csvFile.length());
    ServletOutputStream out;

    try {
        out = resp.getOutputStream();
        out.write(csvFile);
        out.flush();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        out.close();
        out.flush();
    }

}

Hope it helps.

Update:

This is how I mapped the byte[].

<property
    name="image"
    update="true"
    insert="true"
    not-null="false"
    unique="false"
    type="binary"
>
    <column name="image" />
</property>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文