Transfer File objek dari file input ke back-end php [duplikat]

Mencoba menggunakan cara sederhana untuk mengunggah gambar ke server back-end hanya menggunakan javascript dan PHP (Tanpa AJAX). Saya telah memutuskan untuk mencoba menambahkan data .files[0] dari input ke FormData untuk mengirimkannya dengan POST.

Saya lebih suka untuk tidak menggunakan formulir pengiriman dan lebih suka menggunakan httpRequest untuk mendapatkan pesan lulus/gagal karena hal-hal lain harus dilakukan pada halaman yang sama setelah gambar/file diunggah.

Jika memungkinkan, bisakah seseorang menunjukkan kepada saya cara mengirim objek data melalui parameter httpRequest. Setelah mencapai back-end, saya dapat memanipulasinya dengan baik, tetapi saya tidak dapat menemukan cara mengirimkannya yang berfungsi melalui metode non 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 EDIT - Menambahkan 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);
}

}

KESALAHAN:

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

person Jim Evil Chippy Perry    schedule 01.12.2017    source sumber
comment
XMLHttpRequest dan ajax adalah hal yang sama   -  person Garr Godfrey    schedule 01.12.2017
comment
Yah, itu membuatku menjadi idiot. Saya akan menghapus bagian judul itu - adakah yang tahu cara membuatnya berfungsi?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
kami mungkin perlu melihat fungsi getxml() Anda. Anda mungkin perlu menyetel jenis penyandian ke multipart/form-data   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Saya telah menambahkan fungsi getxml. Ini adalah pemeriksa httprequest yang disederhanakan untuk melihat apakah pengguna menggunakan Internet Exploder atau tidak.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@Taplar Menambahkan setRequestHeader(Content-Type,mulitpart/form-data); belum diperbaiki :(. Semua validasi dilakukan di back-end, makanya saya kirim filenya ke sisi php, karena bukan hanya filenya saja yang harus diupload, tapi linknya juga harus dibuat di database.(karenanya persyaratan untuk melakukannya di sisi server)   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
CORS tidak dapat diatasi hanya dengan mengubah permintaan. Ini harus juga ditangani di server. Jika javascript dapat menghindari CORS, itu bukan mekanisme keamanan.   -  person Taplar    schedule 01.12.2017
comment
@Taplar Luar Biasa. Bagaimana cara melakukan ini dengan benar tanpa risiko keamanan yang besar dan mengirim file ke server saya dari mesin lokal pengguna?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
Cara melakukannya bisa spesifik pada server tempat Anda berada. Saya akan mengarahkan Anda ke: enable-cors.org   -  person Taplar    schedule 01.12.2017
comment
@Taplar Jika saya tidak dapat memodifikasi server karena saya menggunakan sistem VPS (Dreamhost) mereka (Diizinkan untuk meng-host situs web, tetapi tidak melakukan modifikasi apa pun selain struktur file) apa yang dapat saya lakukan? Saya tahu saya dapat mengunggah file dari URL lain karena saya telah membuat permintaan yang sama, hanya saja dibutuhkan file dari situs web lain.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@GarrGodfrey Saya mengikuti tautan yang mengklaim pertanyaan ini adalah duplikat yang diberikan kepada saya oleh Taplar dan telah menerapkan xmlhttp.setRequestHeader(Content-Type,multipart/form-data);. Ironisnya, saya sekarang mendapatkan kesalahan dari poster asli pertanyaan ini dan sisi server saya masih tidak menerima file tersebut (atau setidaknya, file dengan nama 'uploadedFile', yang seharusnya dienkapsulasi dengan FormData). Ada ide di pihak Anda?   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
maaf, pengaturan tipe konten menghilangkan batas yang seharusnya dihasilkan secara otomatis, batalkan itu. Ini juga sepertinya bukan masalah CORS jika kesalahannya ada di PHP.   -  person Garr Godfrey    schedule 01.12.2017
comment
browser mana yang kamu gunakan?   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Saya menguji dengan Chrome, Firefox dan IE.   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
bisakah kamu melakukan print_r($_FILES); di PHP Anda untuk melihat apa yang Anda dapatkan?   -  person Garr Godfrey    schedule 01.12.2017
comment
@GarrGodfrey Baru saja sampai di rumah - di browser firefox saya yang lebih baru, ini berfungsi. Bukan di chrome, ingatlah   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@GarrGodfrey Oke. Sudahlah. Sekarang berfungsi. Jadi... ini semua karena browser yang ketinggalan jaman?   -  person Jim Evil Chippy Perry    schedule 02.12.2017
comment
Tidak yakin. Lihat juga ini, masalah serupa tetapi tidak ada solusi: judul stackoverflow.com/questions/45642953/   -  person Garr Godfrey    schedule 02.12.2017