最近使用Mysql存儲附件表時遇到了一個問題,就是附件無法打開。
首先,我檢查了Mysql表結構的定義,發現附件字段的類型為BLOB,這是一種二進制數據類型,可以存儲任何類型的數據。
接著,我檢查了數據庫中存儲的附件數據,發現數據是完整的,沒有任何損壞。
為了進一步排除問題,我使用了多種方式打開附件,包括使用Windows自帶的圖片查看器、Microsoft Word等軟件,但都沒有成功。
最后,我想到可能是我的代碼有問題。于是,我檢查了代碼,發現我使用了錯誤的編碼方式進行了附件的上傳和下載。正確的編碼方式應該是base64,而不是binary。
// 上傳附件 $base64_file = base64_encode(file_get_contents($file_path)); $sql = "INSERT INTO attachment (file_name, file_type, file_content) VALUE (?, ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$file_name, $file_type, $base64_file]); // 下載附件 $sql = "SELECT * FROM attachment WHERE attachment_id = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$attachment_id]); $attachment = $stmt->fetch(); header('Content-Type: ' . $attachment['file_type']); header('Content-Disposition: attachment; filename="' . $attachment['file_name'] . '"'); echo base64_decode($attachment['file_content']);
通過修改編碼方式,我成功解決了這個問題,現在可以正常地打開附件。