【问题标题】:How to store an image upload with PHP from an Ajax Request如何使用 PHP 从 Ajax 请求存储图像上传
【发布时间】:2018-05-22 09:08:42
【问题描述】:

我使用promosis 结合JS Formdata 和AJAX 将文件发送到服务器。但是我在存储它时遇到了问题。由于move_uploaded_file() 使用数组失败,并且使用文件名不会导致错误但仍然失败。

AjaxCall:

 let fd = new FormData();
    fd.append('id', id);
    fd.append('name', name);
    fd.append('caption', caption);
    if( upload.cachedFileArray[0] !== null || typeof upload.cachedFileArray !== "undefined"){
        alert('defined...');
        alert(upload.cachedFileArray[0]);
        fd.append('file', upload.cachedFileArray[0]);
    } else {
        alert(upload.cachedFileArray[0]);
        alert('U heeft nog geen afbeelding toegevoegd!');
    }
    $.ajax({
        url: '/SaveSlide',
        type: 'POST',
        processData: false,
        contentType: false,
        beforeSend: function (xhr) {
            const token = jQuery('meta[name="csrf_token"]').attr('content');
            if (token) {
                return xhr.setRequestHeader('X-CSRF-TOKEN', token);
            }
        },
        data: fd,
        success: function (data) {
            alert(data);

        }
    });

PHP:

 public function SaveSlide(){
    if($_FILES['file']){
        //echo json_encode($_POST['id'] . $_POST ['name'] .$_POST['caption'] . var_dump($_FILES ['file']));

        if($_FILES['file']['type'] === "image/jpeg") {
            if (move_uploaded_file($_FILES['file'], asset('assets/img/'))) {
                echo json_encode('Uploaded!');
            } else {
                echo json_encode('Not uploaded :(!');
            }
        }
        //$html = $this->slideController->EditSlide($data);
    }
}

AJAX 调用确实会发送数据,因为我可以回显对象数组并显示它。

数组的结构如下: name:lastmodified:lastmodifieddate:WebkitRelativePath:size:type:slice: function(){}

如何将上传的文件/图像存储到服务器?

【问题讨论】:

    标签: javascript php jquery ajax file-upload


    【解决方案1】:

    您是否将 permission 设置为 img 文件夹?将其设置为 766

    【讨论】:

    • 我目前正在使用 Xampp 在我的 Windows PC 上的本地开发环境中工作。但我检查了文件夹的权限。每个用户都可以读取/执行、读取/写入、修改和列出文件夹内容。
    【解决方案2】:

    我用$FILES['file']['tmp_name'] 再次尝试了它,我遇到了可以处理的错误。

    我现在通过将代码更改为:

     public function SaveSlide(){
        if($_FILES['file']){
            echo json_encode($_POST['id'] . '<br>' . $_POST ['name'] . '<br>' . $_POST['caption'] . '<br>' . var_dump($_FILES ['file']));
    
            if($_FILES['file']['type'] === "image/jpeg") {
                $path = $_SERVER['DOCUMENT_ROOT'] . '/assets/img/' . $_FILES['file']['name'];
                if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
                    echo json_encode('Uploaded!');
                } else {
                    echo json_encode('Not uploaded :(!');
                }
            }
            //$html = $this->slideController->EditSlide($data);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 2015-06-08
      • 1970-01-01
      • 2013-11-30
      • 2012-01-28
      • 1970-01-01
      • 2013-08-24
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多