所以,这就是问题:我上传了一个文件,它已成功上传。但它部分上传的图像:第一个700kb上传,而图像的其余部分只是白色或灰色。 这是一个例子:
脚本本身正常工作,我尝试了不同的主机,但它只在特定主机上执行此“技巧”。我认为这是一个很好的服务器配置。它使用cpanel。我的php选项设置为具有最大内存限制,上传限制和post_size。 这是脚本:
$filename = basename($_SERVER['QUERY_STRING']);
if (!empty($_POST)) {
$error = false;
$absolutedir = dirname(__FILE__);
$dir = '/tmp/';
$serverdir = $absolutedir.$dir;
$tmp = explode(',',$_POST['file']);
$file = base64_decode($tmp[1]);
$extension = strtolower(end(explode('.',$_POST['filename'])));
$filename = $_POST['name'].'.'.$extension;
//$filename = $file.'.'.substr(sha1(time()),0,6).'.'.$extension;
file_put_contents($serverdir.$filename, $file);
/*$handle = fopen($serverdir.$filename,'w');
fwrite($handle, $file);
fclose($handle);*/
$response = array(
"result" => true,
"url" => $dir.$filename.'?'.time(), //added the time to force update when editting multiple times
"filename" => $filename
);
echo json_encode($response);
//echo json_encode(array('result'=>true));
} else {
$filename = basename($_SERVER['QUERY_STRING']);
$file_url = dirname(__FILE__).'/tmp/'.$filename;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);
exit();
}
file_put_contents
和fwrite
都有相同的行为。
让我们回顾一下:image< 700kb =完全上传。图像> 700kb,首先上传700kb,其余图像为灰色或白色。我很困惑。
HTML表单:
<form enctype="multipart/form-data" role="form" action="html5fileupload.form.php" method="POST" class="contactForm validateIt" data-email-subject="Request Form" data-show-errors="true" >
<div class="html5fileupload demo_basic" data-url="html5fileupload.php" data-max-filesize="12288000" data-multiple="true" data-autostart="true" style="width: 100%;">
<input id="file" type="file" name="file[]" multiple>
</div>
</form>