我拼命想要解决这个问题。我有一堆文件存储在webroot之外,我需要在几次验证后将它们提供给用户。这些文件已使用Flex应用程序上载或刚刚通过FTP手动上载。我有一个服务脚本,看起来像:
<?php
$filePath = '/for/demonstration/only.jpg';
...
$type = exif_imagetype($filePath);
$size = filesize($filePath);
if ($type && $size > 0) {
switch($type)
{
case IMAGETYPE_PNG:
header("Content-Type: image/png");
break;
case IMAGETYPE_JPEG:
header("Content-Type: image/jpeg");
break;
default:
header("Content-Type: text/plain");
break;
}
header("Content-Length: {$size}");
readfile($filePath);
exit;
} else {
echo 'error';
}
非常简单。 图像然而,在上传过程的某个地方,由于编码过程,该文件已经获得额外的100-130B,现在似乎已损坏。我得到无关字节错误。上传脚本也非常简单,Flex使用FileRefrence为用户选择文件,然后对数据进行编码并将其发送到服务器脚本:
<?php
function fileupload($data)
{
$daily_folder = 'today/';
$fileName_clipped = substr( $fileName, 0, $max_file_len );
$fileName_clipped = preg_replace('/\./','_',$fileName_clipped);
$filePath = '/path/to/storage' . $daily_folder;
if(!is_dir($filePath))
mkdir($filePath);
if( strlen($data->filedata) > 0 ) {
if( !file_put_contents($filePath . $fileName_clipped, base64_decode($data->filedata)) )
return false;
} else {
return false;
}
}
运行流程
文件A:31,740B in,31,848B out,108B extra
文件B:35,273B in,31,403B out,130B extra
我想这可能是在Flash方面,但老实说这很简单。我只是没有看到额外数据的来源,以及为什么它会破坏文件。任何人都知道为什么会这样吗?或者更好的是,我现在如何清理这些文件?
答案 0 :(得分:0)
这是故事。当我从一台服务器备份所有图像并将它们移动到另一台服务器时,我将所有文件FTP到我的Windows笔记本电脑上。无论是因为Windows还是FileZilla,该过程都会损坏所有文件。在他们身上添加一堆垃圾。我会根据你认为导致问题的方式进行输入,但无论我找到问题并修复它。
解决方案是压缩服务器上的父目录并下载zip。我没有修改任何代码。只是一个简单的程序修订。多么蹩脚。