Перенести объект File из входного файла в серверную часть php

Попытка использовать простую загрузку изображений на внутренний сервер, используя только javascript и PHP (без AJAX). Я решил попробовать добавить данные .files[0] из ввода в FormData, чтобы отправить их с помощью POST.

Я бы предпочел не использовать форму отправки и предпочел бы использовать httpRequest, чтобы получить сообщение о прохождении/непрохождении, поскольку другие действия должны выполняться на той же странице после загрузки изображения/файла.

Если возможно, может ли кто-нибудь указать мне способ отправки объекта данных через параметры httpRequest. Как только он достиг серверной части, я могу нормально манипулировать им, но я не могу найти способ отправить его, который работает с помощью методов, отличных от AJAX.

HTML:

File Location: <br>
<input type='File' name='addNewMediaFileLocation' id='addNewMediaFileLocation' class='addFileText'><br>
Media Type: <select id='addFileFromLocalTypeSelect' class='addFileSelect>
 <option>....</option></select>
<input type='button' class='profileButton' id='addMediaFromLocalButton' value='Upload' onclick="uploadMediaFromLocal('$ComicName', '$alias');"

JAVASCRIPT РЕДАКТИРОВАТЬ — добавлен getxml()

function getxml()
{ 
if (window.XMLHttpRequest) 
{
    xmlhttp = new XMLHttpRequest();
} 
else 
{
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp; 
}

function uploadMediaFromLocal(ComicName, UploadedBy)
{
var Type = document.getElementById("addFileFromLocalTypeSelect").value;
var file = document.getElementById('addNewMediaFileLocation').files[0];
var fd = new FormData();
fd.append("uploadedFile", file);

xmlhttp = getxml();
xmlhttp.open("POST", "php/actions.php?F=addMediaFromLocal" + "&Type="+Type, true);
xmlhttp.onreadystatechange = function()
{
    if(xmlhttp.readyState == XMLHttpRequest.DONE)
        var response = xmlhttp.responseText;
        if(response == 'Success')
        {
            document.getElementById("uploadMSG").innerHTML='Image upload successful';
            document.getElementById("addNewMediaFileLocation").value="";
            document.getElementById("addMediaDescriptionForLocalText").value="";
        }
        else
        {
            document.getElementById("uploadMSG").innerHTML=response;
        }
}
xmlhttp.send(fd);
}

PHP

if($function == 'addMediaFromLocal')
{
$AddSuccess = true;
$AddError ='File not uploaded.';
$MediaType = $_REQUEST['Type'];
$FileType = $_FILES['uploadedFile']['type'];
$FileName = $_FILES['uploadedFile']['name'];
$FileContent = file_get_contents($_FILES['uploadedFile']['tmp_name']);

 ....VALIDATE INFO...
if($AddSuccess) 
{
    //check success
    if(move_uploaded_file("../media/$name",$FileContent) )
    {
        print("Succes");
    }
    else 
    {
        print($AddError. "Image upload unsuccessful, please check your folder permission<br>");
    }
}
else
{
    print($AddError);
}

}

ОШИБКА:

E_NOTICE Error in file �actions.php� at line 1036: Undefined index: uploadedFile

person Jim Evil Chippy Perry    schedule 01.12.2017    source источник
comment
XMLHttpRequest и ajax — это одно и то же.   -  person Garr Godfrey    schedule 01.12.2017
comment
Что ж, это делает меня идиотом. Я уберу эту часть названия - есть идеи, как это сделать?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
нам может понадобиться увидеть вашу функцию getxml(). Вам, вероятно, нужно установить тип кодирования на multipart/form-data   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Я добавил функцию getxml. Это упрощенная программа проверки httprequest, чтобы узнать, использует ли пользователь Internet Exploder или нет.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@Taplar Добавление setRequestHeader (Content-Type, mulitpart/form-data); не исправил это :(. Вся проверка выполняется в бэкэнде, поэтому я отправляю файл на сторону php, потому что не только файл должен быть загружен, но и ссылка должна быть сделана в база данных (отсюда и требование делать это на стороне сервера)   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
CORS нельзя преодолеть, просто изменив запрос. Он должен также обрабатываться на сервере. Если бы javascript мог обойти CORS, это не был бы механизм безопасности.   -  person Taplar    schedule 01.12.2017
comment
@Taplar Отлично. Как мне сделать это правильно без серьезных рисков для безопасности и отправить файл на мой сервер с локальной машины пользователя?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
Как это сделать, зависит от сервера, на котором вы находитесь. Я хотел бы указать вам на: enable-cors.org   -  person Taplar    schedule 01.12.2017
comment
@Taplar Если я не могу изменить сервер, потому что использую их (Dreamhost) систему VPS (разрешено размещать веб-сайты, но не вносить изменения во что-либо, кроме файловой структуры), что я могу сделать? Я знаю, что могу загружать файлы с других URL-адресов, потому что я сделал тот же запрос, за исключением того, что он берет файл с другого веб-сайта.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@GarrGodfrey Я перешел по ссылке, утверждающей, что этот вопрос был дубликатом, данным мне Тапларом, и реализовал xmlhttp.setRequestHeader(Content-Type,multipart/form-data);. По иронии судьбы, теперь я получаю сообщение об ошибке исходного автора этого вопроса, и моя серверная сторона все еще не получает файл (или, по крайней мере, файл с именем «uploadedFile», в котором FormData должен быть инкапсулирован). Любые идеи с вашей стороны?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
извините, установка типа контента удаляет границу, которую он должен создавать автоматически, отмените это. Это также не похоже на проблему CORS, если ошибка связана с PHP.   -  person Garr Godfrey    schedule 01.12.2017
comment
какой браузер вы используете?   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Я тестирую Chrome, Firefox и IE.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
вы можете сделать print_r($_FILES); в вашем PHP, чтобы увидеть, что вы получаете?   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Только что вернулся домой - в моем новом браузере Firefox все работает. Не на хроме, заметьте   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@GarrGodfrey Хорошо. Неважно. Теперь это работает. Так... это все из-за устаревшего браузера?   -  person Jim Evil Chippy Perry    schedule 02.12.2017
comment
Не уверен. См. также эту аналогичную проблему, но без решения: заголовок stackoverflow.com/questions/45642953/   -  person Garr Godfrey    schedule 02.12.2017