我正在构建一个需要能够上传大型 .wav 文件的站点。我认为上传这些文件的最佳方式是通过一个可以将数据分块到服务器的 jQuery 插件。我选择了Real Ajax Uploader来执行此操作。
我将以下内容放在一起,它适用于较小的文件:
$('.demo').ajaxupload({
url : '/upload.php',
remotePath: '/remote/path/',
maxFiles: 1,
maxFileSize: '250M',
});
当我有一个涉及“分块”的较大文件时,就会出现问题。由于某种原因,脚本不断给我这个错误:
Cannot write on file.
我在upload.php 文件中追踪到了这个位置:
...
//start of the file upload, first chunk
if ($currByte == 0) {
$tempFile = tempnam($this->tempPath, 'axupload');
$this->tempFileName = basename($tempFile);
}
// some rare times (on very very fast connection), file_put_contents will be unable to write on the file,
// so we try until it writes for a max of 5 times
$try = 5;
while (file_put_contents($tempFile, $fileChunk, FILE_APPEND) === false && $try > 0) {
usleep(50);
$try--;
}
//if the above fails then user cannot write file due to permission or other problems
if (!$try) {
$this->message(-1, 'Cannot write on file.');
}
...
我认为这意味着它$tempFile
不可写,所以我添加了这一点:
...
//start of the file upload, first chunk
if ($currByte == 0) {
$tempFile = tempnam($this->tempPath, 'axupload');
$this->tempFileName = basename($tempFile);
}
chmod($tempFile, 0755);
...
我又试了一次,还是有问题,于是把/tmp的权限改成了755,心想可能是这样。再次,什么都没有。
我可以尝试更改我的 /tmp 目录的位置并拥有一个更可写的环境,但如果有更简单的解决方案,我宁愿使用它。
谢谢你。