亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery - 將文件名附加到 FormData 并在 PHP 腳本中獲取它

jQuery - 將文件名附加到 FormData 并在 PHP 腳本中獲取它

PHP
LEATH 2022-07-16 18:46:31
我有以下 JS 代碼,用于根據其路徑上傳圖像:var data = new FormData();data.append('fileName', fileName);data.append('file', file);$.ajax({    url : dbPath + "upload-file.php",    type: 'POST',    data: data,    contentType: false,    processData: false,    mimeType: "multipart/form-data",    success: function(data) {       Swal.close();       var fileURL = dbPath + data;       console.log('FILE UPLOADED TO: ' + fileURL);這是我的upload-image.php腳本:<?php$fileName = $_POST['fileName'];if ($_FILES["file"]["error"] > 0) {    echo "Error: " .$_FILES["file"]["error"]. "<br>";} else {    // Check file size    if ($_FILES["file"]["size"] > 20485760) { // 20 MB        echo "Sorry, your file is larger than 20 MB. Upload a smaller one.";        } else { uploadImage(); }}// ./ If// UPLOAD IMAGE ------------------------------------------function uploadImage() {    // generate a unique random string    $randomStr = generateRandomString();    $filePath = "uploads/".$randomStr."".$fileName;    // upload image into the 'uploads' folder    move_uploaded_file($_FILES['file']['tmp_name'], $filePath);    // echo the link of the uploaded image    echo $filePath;}// GENERATE A RANDOM STRING ---------------------------------------function generateRandomString() {    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';    $charactersLength = strlen($characters);    $randomString = '';    for ($i = 0; $i<20; $i++) {        $randomString .= $characters[rand(0, $charactersLength - 1)];    }    return $randomString;}?>上傳文件(例如 JPG 圖像)時一切正常,但我的目的是使用:data.append('fileName', fileName);只需將文件名和擴展名附加到 myFormData并獲取如下文件 URL:https://example.com/_json/uploads/03aC8qsIk4hanngqO3G4_fileName.jpg但是我的 PHP 腳本中的 $fileName 變量會觸發 error_log 行Undefined index fileName in line xx,那么有沒有辦法上傳文件,獲取其名稱和擴展名并將其附加到我的 PHP 腳本生成的文件 URL 中?我希望我的問題很清楚,我想要做的只是對任何類型的文件進行一般的 Ajax 自動上傳,而不僅僅是圖像,并根據隨機字符串 + 其名稱和擴展名(如 .png, .mp4、.pdf 等)。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

我已經想通了,感謝所有評論,我不得不將其附加fileName到我的FormData()并編輯我的 PHP 腳本,如下所示:


JS:


function uploadFile() {

var dbPath = '<?php echo $DATABASE_PATH ?>';

    var file = $("#file")[0].files[0];

    var fileName = file.name;

    console.log('FILE NAME: ' + fileName);


    Swal.fire({icon: 'success', title: 'Loading...', showConfirmButton: false })


    var data = new FormData();

    data.append('file', file);

    data.append('fileName', fileName); <!-- ADDED THIS LINE


    $.ajax({

        url : dbPath + "upload-file.php?fileName=" + fileName, <!-- ADDED THIS LINE

        type: 'POST',

        data: data,

        contentType: false,

        processData: false,

        mimeType: "multipart/form-data", <!-- ADDED THIS LINE

        success: function(data) {

            Swal.close();


            var fileURL = dbPath + data;

            console.log('FILE UPLOADED TO: ' + fileURL);

            // error

            if (data.includes("ERROR:")) {

                Swal.fire({ icon: 'error', title: 'Oops...', text: data, });

            // show file data

            } else {

                $("#fileURL").val(fileURL);

                $("#viewButton").attr("href", fileURL);

                $("#viewButton").css("display", "block");

            }

        // error

        }, error: function(e) {  

            Swal.fire({ icon: 'error', title: 'Oops...', text: 'Something went wrong: ' + e.message, });

    }});

}

我的upload-file.php腳本:


<?php include 'config.php';


if ($_FILES["file"]["error"] > 0) {

    echo "Error: " .$_FILES["file"]["error"]. "<br>";


} else {

    // Check file size

    if ($_FILES["file"]["size"] > 20485760) { // 20 MB

        echo "ERROR: Your file is larger than 20 MB. Please upload a smaller one.";    

    } else { uploadImage(); }


}// ./ If



// UPLOAD IMAGE ------------------------------------------

function uploadImage() {

    // generate a unique random string

    $randomStr = generateRandomString();

    $filePath = "uploads/".$randomStr;


    // upload image into the 'uploads' folder

    move_uploaded_file($_FILES['file']['tmp_name'], $filePath);


    // echo the link of the uploaded image

    echo $filePath;

}


// GENERATE A RANDOM STRING ---------------------------------------

function generateRandomString() {

    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $charactersLength = strlen($characters);

    $randomString = '';

    for ($i = 0; $i<20; $i++) {

        $randomString .= $characters[rand(0, $charactersLength - 1)];

    }

    return $randomString."_".$_POST['fileName']; <!-- ADDED THIS LINE

}

?>

現在我終于可以上傳任何類型的文件并在 URL 末尾獲取其名稱 + 擴展名,它可以完美運行。


查看完整回答
反對 回復 2022-07-16
  • 1 回答
  • 0 關注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號