2011-12-01 107 views
2

我想在数据库中保存大小的邮件附件。在php中获取文件大小

所以我通过PHP文本方式打开邮件的附件,我可以看到这样的例子:

Content-Type: image/jpeg; name="donoghte D2.jpg" 
Content-Disposition: attachment; filename="donoghte D2.jpg" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: f_gvn2345e0 
 
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG 
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM ...

我将这段代码显示它

<?php 
header('Content-Type: image/jpeg'); 
echo (base64_decode($text)); 
?> 

如果我想计算这个文件的大小,并将它和它的大小存储在数据库中,最好的方法是什么?

  1. 我应该在数据库中保存编码64(像邮件发送的那样)吗?
  2. 如果是这样,该字段的数据类型应该是什么?
  3. 要计算它的大小,我应该解码它,然后得到strlen它吗?还是有更快的方法?

与您的关注特别感谢

回答

0

你处理二进制对象那里,所以它可能是最好的存储它如同一样。我不确定你使用的是什么数据库,但是MySQL有这个确切目的的BLOB(Binary Large OBject)。

您也可以将它写入文件系统。有几十个关于对堆栈溢出这两种技术的优点好讨论的,所以我不会去到这里(如:Storing images in DB? Yea or Nay?

我相信,如果你有在一个字符串解码数据,然后strlen会给你它的文件大小。您也可以在存储后查询数据库或文件系统以获取它。

0

得到一个字符串长度在PHP中您可以使用strlen()

0

格式我会用blob使您能够存储base64_decoded形式的二进制数据。但是,如果您不关心存储容量并希望重新发送附件,则可以使用DB支持的任何文本格式来存储base64编码的数据(以节省处理时间)。如果您关心数据库存储容量,我会分开保存文件并将文件名和路径仅存储到数据库中。

获取文件大小要获取图像长度,请在解码数据上使用strlen。最好还使用Content-length标题。