【问题标题】:Ppt file corrupted after restoring it from MySQL`s mediumblob从 MySQL 的 mediumblob 恢复 Ppt 文件后损坏
【发布时间】:2020-05-27 15:49:16
【问题描述】:

我正在 Java Spring Boot 上重写旧的 PHP 应用程序。有一种机制可以在 MySQL db 中存储和检索 ppt 文件。 php 数据库插入:

$fsize = filesize($tmpFile);
$blob = addslashes(fread(fopen($tmpFile, "r"), $fsize));
$sql = "INSERT INTO tablename (id, pptSnapshot) VALUES ($id, '$blob')";

php 数据库检索:

$id = $_REQUEST['id'];
$sql = "SELECT pptSnapshot FROM tablename WHERE id=$id";
$result = runQuery($sql, "dm_prj");
$row = mysqli_fetch_array($result);

header("Pragma: no-cache");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=\"PWS_snapshot_$id.pptx\"");
echo $row['PPTSnapshot'];

在此之后文件就可以了。

但是

我正在尝试使用 Java 获取此文件:

快照实体:

@Entity
@Table(name = "prj_status_report_snapshots")
public class StatusReportSnapshot {
    @Id
    private int id;

    @Lob
    private Blob pptSnapshot;
    //getters setters
}

服务功能:

 public byte[] getUserSnapshot(int id) throws Exception {
        StatusReportSnapshot snapshot = this.snapshotRepository.getSnapshotBySnapshotId(id).get();
        Blob blob = snapshot.getPptSnapshot();
        byte[] blobBytes = blob.getBytes(1, (int) blob.length());
        return blobBytes;
    }

控制器:

@GetMapping(value = "/test/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public @ResponseBody
    byte[] test(@PathVariable int id) throws Exception {
        return this.reportService.getUserSnapshot(id);
    }

我尝试了不同的方法:将 blob 映射到 String、byte[]、Blob。试图将其保存到文件系统,而不是通过浏览器将其返回给用户。结果总是一样 -> 提取的 PPT 文件大小是预期的两倍或更多,并且已损坏(无法打开它甚至看到空白页)。

我正在使用与 php 应用程序相同的数据库。 对于 php -> 一切都像一个魅力。

非常感谢您对如何解决它的任何想法。 附言我正在搜索大约 2 天并测试了最常见的方法。

【问题讨论】:

    标签: java php mysql hibernate


    【解决方案1】:

    好的,我知道发生了什么。 问题出在表编码中。

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 2013-07-18
      • 2018-06-07
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      相关资源
      最近更新 更多