You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript显示Firebase实时数据库中图片URL对应的图片?

问题:将Firebase实时数据库中的图片URL转换为显示图片本身是否可行?

我目前已能从Firebase实时数据库中获取并显示图片URL,但需要将其转换为显示图片本身,请问是否可行?

由于我对JavaScript和Firebase并不熟悉,尚未尝试编写相关代码,以下是我用于从Firebase实时数据库检索捐赠数据并在模态框中展示的现有代码:

HTML代码

<div class="modal-body">
    <label class="labs">Donation ID: </label>
    <input type="text" id="DonationId" readonly="readonly"> <br>

    <label class="labs">User ID: </label>
    <input type="text" id="UserId" readonly="readonly"> <br>

    <label class="labs">Name: </label>
    <input type="text" id="FName" readonly="readonly"> <br>

    <label class="labs">Organization: </label>
    <input type="text" id="Org" readonly="readonly"> <br>

    <label class="labs">Contact Person: </label>
    <input type="text" id="ContPer" readonly="readonly"> <br>

    <label class="labs">Contact Number: </label>
    <input type="text" id="ContNum" readonly="readonly"> <br>

    <label class="labs">Type: </label>
    <input type="text" id="Type" readonly="readonly"> <br>

    <label class="labs">Date: </label>
    <input type="text" id="Date" readonly="readonly"> <br>

    <label class="labs">Time: </label>
    <input type="text" id="Time" readonly="readonly"> <br>

     <label class="labs">Purchase Date: </label>
    <input type="text" id="PDate" readonly="readonly"> <br>

    <label class="labs">Expiration Date: </label>
    <input type="text" id="EDate" readonly="readonly"> <br>

    <label class="labs">Weight: </label>
    <input type="text" id="Weight" readonly="readonly"> <br>

    <label class="labs">Note: </label>
    <textarea id="Note" readonly="readonly"></textarea> <br>

    <label class="labs">Attached Image: </label>
    <input type="text" id="Img" readonly="readonly"> <br>

    <label class="labs">Status: </label>
    <input type="text" id="Stat" readonly="readonly">
</div>

JavaScript代码

function AddItemToTable(id,uid,name,org,contPer,contNo,type,date,time,pdate,edate,weight,note,image,status){
    let trow = document.createElement("tr");
    let td1 = document.createElement('td');
    let td2 = document.createElement('td');
    let td3 = document.createElement('td');
    let td4 = document.createElement('td');
    let td5 = document.createElement('td');
    let td6 = document.createElement('td');
    let td7 = document.createElement('td');
    let td8 = document.createElement('td');
    let td9 = document.createElement('td');
    let td10 = document.createElement('td');
    let td11 = document.createElement('td');
    let td12 = document.createElement('td');
    let td13 = document.createElement('td');
    let td14 = document.createElement('td');
    let td15 = document.createElement('td');
    let td16 = document.createElement('td');

    newDonationList.push([id,uid,name,org,contPer,contNo,type,date,time,pdate,edate,weight,note,image,status]);
    td1.innerHTML = ++num;
    td2.innerHTML = id;
    td3.innerHTML = uid;
    td4.innerHTML = name;
    td5.innerHTML = org;
    td6.innerHTML = contPer;
    td7.innerHTML = contNo;
    td8.innerHTML = type;
    td9.innerHTML = date;
    td10.innerHTML = time;
    td11.innerHTML = pdate;
    td12.innerHTML = edate;
    td13.innerHTML = weight;
    td14.innerHTML = note;
    td15.innerHTML = image;
    td16.innerHTML = status;

    td15.classList += "statusField";
    td4.classList += "nameField";
    td5.classList += "organizationField";
    td8.classList += "typeField";

    trow.appendChild(td1);
    trow.appendChild(td2);
    trow.appendChild(td3);
    trow.appendChild(td4);
    trow.appendChild(td5);
    trow.appendChild(td6);
    trow.appendChild(td7);
    trow.appendChild(td8);
    trow.appendChild(td9);
    trow.appendChild(td10);
    trow.appendChild(td11);
    trow.appendChild(td12);
    trow.appendChild(td13);
    trow.appendChild(td14);
    trow.appendChild(td15);
    trow.appendChild(td16);

    var ControlDiv = document.createElement("td");
    ControlDiv.innerHTML = '<button type="button" class="manage-btn" data-toggle="modal" data-target="#ModalCenter" onclick="FillModal('+num+')">VIEW</button>'

    trow.appendChild(ControlDiv);
    tbody.appendChild(trow);

}

function AddAllITemsToTable(Donation) {
    num=0;
    tbody.innerHTML="";
    Donation.forEach(element => {
        AddItemToTable(element.id, element.uid, element.fullName, element.organization, element.contactPerson, element.contactNo, element.type, element.dateAdded, element.dateAddedTime, element.datePurchased, element.dateExpired, element.weight, element.notes, element.imageUrl, element.donationStatus);
    });
}

function GetAllDataRealtime() {
   const dbRef = ref(database, 'Users');

    onValue(dbRef,(snapshot) => {
        var Donations = [];

        snapshot.forEach(userSnapshot => {
            userSnapshot.child("donation").forEach((donationSnapshot) => {
                Donations.push(donationSnapshot.val());
            });
        });

        AddAllITemsToTable(Donations);
    })

}

window.onload = GetAllDataRealtime;

var ModDid = document.getElementById('DonationId');
var ModUid = document.getElementById('UserId');
var ModName = document.getElementById('FName');
var ModOrg = document.getElementById('Org');
var ModContPer = document.getElementById('ContPer');
var ModContNo = document.getElementById('ContNum');
var ModType = document.getElementById('Type');
var ModDate = document.getElementById('Date');
var ModTime = document.getElementById('Time');
var ModPDate = document.getElementById('PDate');
var ModEDate = document.getElementById('EDate');
var ModWeight = document.getElementById('Weight');
var ModNote = document.getElementById('Note');
var ModImage = document.getElementById('Img');
var ModStatus = document.getElementById('Stat');

window.FillModal=(index) => {
    if(index==null){
        ModDid.value = "";
        ModUid.value = "";
        ModName.value = "";
        ModOrg.value = "";
        ModContPer.value = "";
        ModContNo.value = "";
        ModType.value = "";
        ModDate.value = "";
        ModTime.value = "";
        ModPDate.value = "";
        ModEDate.value = "";
        ModWeight.value = "";
        ModNote.value = "";
        ModImage.value = "";
        ModStatus.value = "";
    }
    else{
        --index;
        ModDid.value = newDonationList[index][0];
        ModUid.value = newDonationList[index][1];
        ModName.value = newDonationList[index][2];
        ModOrg.value = newDonationList[index][3];
        ModContPer.value = newDonationList[index][4];
        ModContNo.value = newDonationList[index][5];
        ModType.value = newDonationList[index][6];
        ModDate.value = newDonationList[index][7];
        ModTime.value = newDonationList[index][8];
        ModPDate.value = newDonationList[index][9];
        ModEDate.value = newDonationList[index][10];
        ModWeight.value = newDonationList[index][11];
        ModNote.value = newDonationList[index][12];
        ModImage.value = newDonationList[index][13];
        ModStatus.value = newDonationList[index][14];
        
    }
}

解决方案

完全可行,只需修改两处代码即可实现:

1. 替换HTML中的图片展示控件

把原来显示URL的<input>元素替换为<img>标签,可添加基础样式保证显示效果:

<label class="labs">Attached Image: </label>
<!-- 替换原input为img标签 -->
<img id="ImgDisplay" src="" alt="捐赠图片" style="max-width: 300px; max-height: 300px; object-fit: contain;" />
<br>

2. 修改JavaScript的模态框填充逻辑

首先更新元素获取代码,删除原输入框变量,新增图片元素变量:

// 删除原输入框变量
// var ModImage = document.getElementById('Img');
// 新增图片元素变量
var ModImgDisplay = document.getElementById('ImgDisplay');

然后修改FillModal函数中处理图片的部分,将URL赋值给图片的src属性:

window.FillModal=(index) => {
    if(index==null){
        // 保留其他清空逻辑不变
        ModImgDisplay.src = "";
        ModImgDisplay.alt = "捐赠图片";
    }
    else{
        --index;
        // 保留其他赋值逻辑不变
        const imageUrl = newDonationList[index][13];
        ModImgDisplay.src = imageUrl || "";
        ModImgDisplay.alt = imageUrl ? "捐赠图片" : "无图片";
    }
}

可选:表格中也显示图片而非URL

如果需要在列表表格中也展示图片缩略图,修改AddItemToTable函数中td15的内容:

// 替换原td15.innerHTML = image;
if(image) {
    td15.innerHTML = `<img src="${image}" alt="缩略图" style="width: 80px; height: 80px; object-fit: cover;" />`;
} else {
    td15.textContent = "无图片";
}

完成以上修改后,模态框和表格中将直接展示图片,而非原始URL。


内容的提问来源于stack exchange,提问作者LAAA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:30:53