gpt4 book ai didi

java - 从 MySQL 的mediumblob 恢复后,PPT 文件损坏

转载 作者:行者123 更新时间:2023-12-01 16:30:47 25 4
gpt4 key购买 nike

我正在 Java Spring Boot 上重写旧版 PHP 应用程序。 MySQL 数据库中有一种存储和检索 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'];

此后文件就OK了。

但是

我正在尝试使用 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;
}

Controller :

@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 - 从 MySQL 的mediumblob 恢复后,PPT 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com