Ajax не перемещает мой загруженный файл туда, где он должен быть - PullRequest
0 голосов
/ 27 февраля 2020

Концепция довольно проста, мне нужно загрузить файл без обновления страницы, поэтому я использую ajax. Я никогда не делал загрузку ajax раньше, поэтому я не уверен, что мне здесь не хватает.

function uploadAttachment(){
    var name = document.getElementById("file").files[0].name;
    var did = <? echo $did ?>;
    var form_data = new FormData();
    var oFReader = new FileReader();
    oFReader.readAsDataURL(document.getElementById("file").files[0]);
    var f = document.getElementById("file").files[0];
    var fsize = f.size||f.fileSize;
    if(fsize > 2000000)
    {
        alert("File Size is too large. Please make sure your file's size is less than 2MB.");
    }
    else
    {
        form_data.append("file", document.getElementById('file').files[0]);
        $.ajax
        ({
            url:"/assets/ajax/disciplinaries_upload.php?did="+did,
            method:"POST",
            data: form_data,
            contentType: false,
            cache: false,
            processData: false,
            beforeSend:function()
            {
                $('#uploaded_file').html("<label class='text-success'>File Uploading...</label>");
            },   
            success:function(data)
            {
                $('#uploaded_file').html(data);
            }
        });
    }
};

И мои дисциплины: загрузка. php ajax следующим образом;

<?php
$did = $_GET['did'];

if($_FILES["file"]["name"] != '')
{
     $test = explode('.', $_FILES["file"]["name"]);
     $fname = reset($test);;
     $ext = end($test);
     $name = $fname . '_' .$did. '.' . $ext;
     $location = '/assets/uploads/files/disciplinary_attachments/' . $name;  
     move_uploaded_file($_FILES["file"]["tmp_name"], $location);
     if (file_exists($location)) {
        echo '<label class="text-success">File Uploaded Successfully</label>';
    } else {
        echo '<label style="color: red">File Upload Failed</label><br> Original File Name: '.$_FILES["file"]["name"].'<br> Extension: '.$ext.'<br> Newly Generated Name: '.$name.'<br>File Location: '.$location;
    }
}
?>

Проблема, похоже, заключается в том, что файл на самом деле не загружается. Я получаю созданную ошибку загрузки, которая выглядит следующим образом:

File Upload Failed
Original File Name: test.txt
Extension: txt
Newly Generated Name: test_25.txt
File Location: /assets/uploads/files/disciplinary_attachments/test_25.txt

Так что, судя по всему, он действительно получает файл и знает, где ему нужно go. ... он просто не загружает его туда.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Похоже, что эта проблема может возникать из-за ограничения размера загружаемого файла и типа или проницаемости при записи назначения или путь назначения не удовлетворяет или файлам загрузка по http / https заблокирована командой безопасности.

Решение:

Ограничение размера файла для загрузки: По умолчанию веб-серверы могут позволяют загружать до 1 МБ. вам нужно изменить свойство с именем Max_upload_size по вашему требованию.

Проникновение записи назначения: Иногда мы можем забыть удалить защиту Райта для загрузки папки назначения. Таким образом, измените разрешения, чтобы отключить защиту Райта для папки назначения.

Путь назначения не удовлетворяет: Иногда путь назначения может не очищаться для внесения изменений. Поэтому лучше предоставить полный путь. код snip1: поместите в верхнюю часть вашей логики c в index. php

define("BASE_PATH", __DIR__);

code snip2: измените это $location в schollinaries_upload. php

$location = BASE_PATH . '/assets/uploads/files/disciplinary_attachments/' . $name;

Загрузка файла по http / https: , если ваша команда безопасности включает какие-либо ограничения, как их включить. или внесите свой белый список.

наконец: небольшое изменение в вашем коде.

Кодовый отрывок:

<?php
//comment this two lines in production
error_reporting(E_ALL); 
ini_set('display_errors', 1);

//define("BASE_PATH", __DIR__); //if both index.php and disciplinaries_upload.php in same location, comment this else keep it in index.php 
$did = $_GET['did'];
if(count($_FILES) > 0)
{
     $test = explode('.', $_FILES["file"]["name"]);
     $fname = reset($test);;
     $ext = end($test);
     $name = $fname . '_' .$did. '.' . $ext;
     $location = BASE_PATH . '/assets/uploads/files/disciplinary_attachments';
     $permition_cod = substr(sprintf('%o', fileperms($location)), -4);
     @chmod($location, "0777");
     if (move_uploaded_file($_FILES["file"]["tmp_name"], $location.'/'.$name)) {
        echo '<label class="text-success">File Uploaded Successfully</label>';
    } else {
        echo '<label style="color: red">File Upload Failed</label><br> Original File Name: '.$_FILES["file"]["name"].'<br> Extension: '.$ext.'<br> Newly Generated Name: '.$name.'<br>File Location: '.$location;
    }
    @chmod($location, $permition_cod);
}
?>

Удачи ...

0 голосов
/ 27 февраля 2020

Благодаря @Jay Blanchard и @kerbholz код теперь работает. Все, что мне нужно было сделать, это изменить

 $location = '/assets/uploads/files/disciplinary_attachments/' . $name; 

на

 $location = '/usr/www/users/keepnxcanc/assets/uploads/files/disciplinary_attachments/' . $name; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...