【发布时间】:2020-09-28 02:03:10
【问题描述】:
当我上传一个新的 pdf 文件时,它会上传,但是当我尝试上传一个新文件来替换它时,它从来没有真正做到过(在处理上传到我的 aws 实例的在线版本时,因为当我在本地工作时它确实有效正确)
在应用程序的其他上传中,我也上传 .rar 或 .zip,我可以覆盖现有文件(本地和服务器上)
代码前有用的注释:
- 我曾尝试对我正在工作的文件夹进行 chmod,我曾尝试在上传新文件之前删除该文件(使用取消链接),并且始终将“覆盖”参数设置为 true。
我的表单是这样用js创建的:
(...)
form = '<form enctype="multipart/form-data" accept-charset="utf-8" method="post" id="enunciado-form" action="'+base_url + 'UploadsC/uploadEnunciadoProjeto/' +proj+'">' +
'<input class="form-input-file" type="file" id="file_projeto" name="file_projeto" title="Escolher enunciado" accept=".pdf">' +
'</form>'
$(".cd-message").html(form);
(...)
我的php函数上传表单:
public function uploadEnunciadoProjeto($project_id)
{
$user_id = $this->session->userdata('id');
if($this->verify_teacher($user_id, $project_id, "projeto")){
$path = './uploads/enunciados_files/';
if(!is_dir($path)){
mkdir($path, 0777, TRUE);
} else {
chmod($path, 0777);
chmod("uploads/enunciados_files/" . $project_id . ".pdf", 0777);
}
clearstatcache();
$upload['upload_path'] = $path;
$upload['allowed_types'] = 'pdf';
$upload['file_name'] = $project_id;
$upload['max_size'] = 5048;
$upload['overwrite'] = true;
$this->load->library('upload', $upload);
$this->upload->initialize($upload);
if ( ! $this->upload->do_upload('file_projeto'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else
{
header("Location: ".base_url()."projects/project/".$project_id);
}
} else {
header("Location: ".base_url()."errors/403");
}
}
pdf 的 Mime:
'pdf' => array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream', 'text/html', 'application/x-pdf'),
编辑
已添加
echo substr(sprintf('%o', fileperms("uploads/enunciados_files/" . $project_id . ".pdf")), -4);
到我的 php 函数之前和之后 chmod 和取消链接之后,并有以下结果:
在服务器上:
chmod 之前:0644
chmod: 0777 之后
取消链接后:0
这证明该文件理论上已被删除,但唯一可以上传的 PDF 文件是第一个,并且它永远不会改变。
我想知道问题是否与aws的设置配置有关。我还检查了,我在文件夹中拥有的唯一 .htaccess 实际上授予了访问该文件夹的权限。
【问题讨论】:
-
初步的想法,可以缓存吗?
-
用相同的文件名覆盖文件
-
我尝试在上传前使用“clearstatcache();”清除缓存,不确定这是否是最好的方法。
-
它是相同的文件名,$project_id,因为我正在上传与同一个项目相关的不同文件(例如:601)它总是将文件命名为“601.pdf”
标签: php amazon-web-services codeigniter file-upload upload