ถ่ายโอนไฟล์ obect จากไฟล์อินพุตไปยัง php back-end [ซ้ำกัน]

กำลังพยายามใช้วิธีง่ายๆ ในการอัพโหลดรูปภาพไปยังเซิร์ฟเวอร์ส่วนหลังโดยใช้ 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);
}

พีเอชพี

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 ไม่สามารถเอาชนะได้เพียงแค่เปลี่ยนคำขอ มันต้องได้รับการจัดการบนเซิร์ฟเวอร์ด้วย หากจาวาสคริปต์สามารถหลีกเลี่ยง 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 หากฉันไม่สามารถแก้ไขเซิร์ฟเวอร์ได้เนื่องจากฉันใช้ระบบ VPS (Dreamhost) ของพวกเขา (ได้รับอนุญาตให้โฮสต์เว็บไซต์ แต่ไม่ทำการแก้ไขโครงสร้างไฟล์ที่ขาดไป) ฉันควรทำอย่างไร ฉันรู้ว่าฉันสามารถอัปโหลดไฟล์จาก URL อื่นได้เพราะฉันได้ส่งคำขอเดียวกัน ยกเว้นว่าจะใช้ไฟล์จากเว็บไซต์อื่น   -  person Jim Evil Chippy Perry    schedule 01.12.2017
comment
@GarrGodfrey ฉันติดตามลิงก์โดยอ้างว่าคำถามนี้ซ้ำกับ Taplar ที่มอบให้ฉันและได้ใช้งาน 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 รุ่นใหม่ของฉันมันใช้งานได้ ไม่ใช่บน Chrome ใจคุณ   -  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