【问题标题】:Error with uploading & downloading binary files using MySQL LONGBLOB使用 MySQL LONGBLOB 上传和下载二进制文件时出错
【发布时间】:2013-07-12 12:56:03
【问题描述】:

我在托管的 MySQL 数据库中使用 LONGBLOG 字段来上传和下载附件。我使用了在http://mirificampress.com/permalink/saving_a_file_into_mysql 找到的示例代码,并将文件上传到数据库中(尽管无法检查文件中的每个字节)。

我在下载这些文件时遇到问题:txt 文件正常,但二进制文件(如 JPEG 或 PDF 文件)总是出错。这些二进制文件中的字节在上传或下载期间或两者期间都已更改。

我认为这可能是排序规则问题,但无法解决。

谁能给点建议?

【问题讨论】:

    标签: php mysql file binary blob


    【解决方案1】:

    您链接页面上的示例非常错误。它使用addslashes() 作为 MySQL 的转义函数,另外也没有正确清除魔术引号。

    不要使用这个例子。

    如果你用file_get_contents()读取所有字节,你所要做的就是在上面使用mysqli_real_escape_string()并将它放入一个字符串字段中。

    Longblob 没有编码,所以这应该不是问题,但最好将数据库连接的编码设置为正确的值。

    【讨论】:

    • 谢谢!我更改了上传的 PHP 代码:
      $mysqli = new mysqli(...); $fileName = mysqli_real_escape_string($mysqli, $_FILES['file']['name']); $fileType = mysqli_real_escape_string($mysqli, $_FILES['file']['type']); $fileSize = $_FILES['file']['size']; $content = mysqli_real_escape_string($mysqli,file_get_contents($_FILES['file']['tmp_name'])‌​‌​); $sql = "INSERT INTO Attachment SET File_Name = '".$fileName."', File_Type = '".$fileType."', File_Size = '".$fileSize."', File_Content = '".$content." '"; $result = mysqli_query($mysqli,$sql);这段代码能用吗?
    • 示例代码的下载部分怎么样?我又试了一次,但下载的文件仍然被解释为文本编码而不是二进制。
    • 我无法在此评论中阅读您的代码。请更新您的问题。您是否为图像添加了正确的“内容类型”标头?
    • 谢谢,我可以根据您的建议上传文件并在 MySQL Workbench 中进行验证。上传到服务器的二进制文件没有错误。唯一的问题是如何将 blob 检索回浏览器。
    • 作为下载或可用图像发回?您的教程在第一个上的错误较少,但您应该使用正确的Content-type,例如指定“image/png”。在这种情况下,您可以省略Content-disposition - 它仅用于在下载时传输文件名作为建议。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2021-01-13
    • 1970-01-01
    • 2015-03-17
    • 2011-07-07
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多