Home > Back-end >  Failure to display the file of photos saved in byte format as a large photo when clicking on a small
Failure to display the file of photos saved in byte format as a large photo when clicking on a small

Time:10-03

In the Blazor project, we have a list of photos that are retrieved and displayed in a loop of these photos, which are stored as bytes in the SQL Server database. These photos are displayed correctly and without problems responsively. The problem is that I can't and don't know how to upload these photos as large photos. I have used several methods, but when I want to open a photo in a new tab, only a blank page is displayed. If possible, if you have a solution for this problem, please send it to me.

@using System.Drawing
@using System.IO
@inject IValueMeterLists _iValueMeterLists
@inject ILectureRepository _Lecture
@inject NavigationManager uriHelper

@if (itm == null)
{
    <LoadingSpinner />
}
else
{
    <section >
        <div >
            <div >
                <div >
                    <div >
                        <h3 >@StrComponentTitle</h3>
                        <div >
                            <ul >
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Agent: </p>
                                    </div>
                                    <div >
                                        <p>@itm.AgentFullName</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Type Kind : </p>
                                    </div>
                                    <div >
                                        <p> @itm.ValueMeterListsKind.Name </p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Rcpt Code :</p>
                                    </div>
                                    <div >
                                        <p>@itm.Code </p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Date :</p>
                                    </div>
                                    <div >
                                        <p>@itm.Moment.ToPersianDateString("yyyy/MM/dd")</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Register Date:</p>
                                    </div>
                                    <div >
                                        <p>@itm.RegistMoment.ToPersianDateString("yyyy/MM/dd")</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Travel Cost:</p>
                                    </div>
                                    <div >
                                        <p>@itm.TravelCost</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Other Costs:</p>
                                    </div>
                                    <div >
                                        <p>@itm.OtherCost</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Remarks:</p>
                                    </div>
                                    <div >
                                        <p>@itm.Remarks</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>--:</p>
                                    </div>
                                    <div >
                                        <p>--</p>
                                    </div>
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>

    <section >
        <div >
            <div >
                <div >
                    <div >
                        <h3 >Waranty Info</h3>
                        <div >
                            <ul >
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Product Name: </p>
                                    </div>
                                    <div >
                                        <p>@itm.ValueMeter.Product.GoodsName</p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Prod Number : </p>
                                    </div>
                                    <div >
                                        <p> @itm.ValueMeter.ProductSerialNumber </p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Earanty Statue :</p>
                                    </div>
                                    <div >
                                        <p> 
                                            @if (WarInfoStart != null)
                                            {
                                                @WarInfoStart.WarStatus.Name;
                                            }
                                            else
                                            {
                                                <div>UnKnown</div>
                                            }
                                        </p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Waranty Walidation :</p>
                                    </div>
                                    <div >
                                        <p>
                                            @if (WarInfo != null)
                                            {
                                                @WarInfo.WarStatus.Name;
                                            }
                                            else
                                            {
                                                <div>UnKnown</div>
                                            }
                                        </p>
                                    </div>
                                </li>
                                <li>
                                    <div >
                                        <span ></span>
                                        <p>Waranty End Date:</p>
                                    </div>
                                    <div >
                                        <p>
                                            @if (WarInfo != null)
                                            {
                                                @WarInfo.EndRepaierWarDate.Value.ToPersianDateString("yyyy/MM/dd");
                                            }
                                            else
                                            {
                                                <LoadingSpinnerLinear></LoadingSpinnerLinear>
                                            }
                                        </p>
                                    </div>
                                </li>

                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>

    @if (itm.ValueMeterListsFiles != null)
    {
        <section >
            <div >
                <div >


                    @foreach (var itms in itm.ValueMeterListsFiles)
                    {
                        <div >
                            <div >
                                <figure >
                                    @*<img src="@ConvertImage(itms.Photo)" alt="Event card thumbnail"> style="width: 400px" *@
                                    <a @onclick="@(() => RunMyJs(Convert.ToBase64String(@itms.Photo)))" style="cursor:pointer;">
                                        <img id="myImg" src="data:image/jpeg;base64, @Convert.ToBase64String(@itms.Photo)" style="cursor:pointer;" />
                                    </a>
                                    <figcaption>
                                        <a @onclick="@(() => RunMyJs(Convert.ToBase64String(@itms.Photo)))" style="cursor:pointer;">
                                            <h4> @itms.ValueMeterListsFileType.TypeName </h4>
                                        </a>
                                        @*  <ul >
                            <li>
                            <span ></span>
                            <p>--</p>
                            </li>
                            <li>
                            <span ></span>
                            <p> -- </p>
                            </li>
                            </ul>*@
                                    </figcaption>
                                    <!-- end /.figcaption -->
                                </figure>
                                <!-- end /.figure -->
                            </div>
                            <!-- end /.event_card -->
                        </div>


                    }

                </div>
                <!-- end /.row -->
            </div>
            <!-- end /.container -->
        </section>
    }
}

@code {
    #region Parameters
    [Parameter]
    public short FiscalYear { get; set; }
    [Parameter]
    public int ValueMeterID { get; set; }
    [Parameter]
    public int ValueMeterListsKindID { get; set; }
    [Parameter]
    public long ValueMeterListsCode { get; set; }
    [Parameter]
    public String StrComponentTitle { get; set; }

    public LosacoWeb.Shared.DTOs.ValueMeter.ValueMeterListsMp itm;
    public string ImageBase64;
    LosacoWeb.Shared.DTOs.ValueMeter.WarInfoMp WarInfo;
    LosacoWeb.Shared.DTOs.ValueMeter.WarInfoMp WarInfoStart;
    #endregion

    protected override async Task OnInitializedAsync()
    {
        try
        {
            itm = await _iValueMeterLists.GetValueMeterLists(FiscalYear, ValueMeterID,
                ValueMeterListsKindID, ValueMeterListsCode);
        }
        catch (Exception ex)
        {
        }

        try
        {
            WarInfo = await _Lecture.GetWarantyStatus(itm.ValueMeter.Product.GoodsCode, itm.ValueMeter.ProductSerialNumber);
            StateHasChanged();
        }
        catch(Exception ex)
        {
        }

        try
        {
            WarInfoStart = await _Lecture.GetWarantyStatus(itm.ValueMeter.Product.GoodsCode, itm.ValueMeter.ProductSerialNumber, itm.ValueMeter.ID);
            StateHasChanged();
        }
        catch(Exception ex)
        {
        }        
    }

    private void gotopageImage()
    {
        uriHelper.NavigateTo("data:image/gif;base64,R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/z595kzAP/s7P goOXMv8 fhw/v739/f 8PD98fH/8mJl fn/9ZWb8/PzWlwv///6wWGbImAPgTEMImIN9gUFCEm/gDALULDN8PAD6atYdCTX9gUNKlj8wZAKUsAOzZz UMAOsJAP/Z2ccMDA8PD/95eX5NWvsJCOVNQPtfX/8zM8 QePLl38MGBr8JCP zs9myn/8GBqwpAP/GxgwJCPny78lzYLgjAJ8vAP9fX/ MjMUcAN8zM/9wcM8ZGcATEL QePdZWf/29uc/P9cmJu9MTDImIN /r7 /vz8/P8VNQGNugV8AAF9fX8swMNgTAFlDOICAgPNSUnNWSMQ5MBAQEJE3QPIGAM9AQMqGcG9vb6MhJsEdGM8vLx8fH98AANIWAMuQeL8fABkTEPPQ0OM5OSYdGFl5jo Pj/ pqcsTE78wMFNGQLYmID4dGPvd3UBAQJmTkP 8vH9QUK vr8ZWSHpzcJMmILdwcLOGcHRQUHxwcK9PT9DQ0O/v70w5MLypoG8wKOuwsP/g4P/Q0IcwKEswKMl8aJ9fX2xjdOtGRs/Pz Dg4GImIP8gIH0sKEAwKKmTiKZ8aB/f39Wsl LFt8dgUE9PT5x5aHBwcP AgP WltdgYMyZfyywz78AAAAAAAD///8AAP9mZv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKgALAAAAAA9AEQAAAj/AFEJHEiwoMGDCBMqXMiwocAbBww4nEhxoYkUpzJGrMixogkfGUNqlNixJEIDB0SqHGmyJSojM1bKZOmyop0gM3Oe2liTISKMOoPy7GnwY9CjIYcSRYm0aVKSLmE6nfq05QycVLPuhDrxBlCtYJUqNAq2bNWEBj6ZXRuyxZyDRtqwnXvkhACDV euTeJm1Ki7A73qNWtFiF /gA95Gly2CJLDhwEHMOUAAuOpLYDEgBxZ4GRTlC1fDnpkM fOqD6DDj1aZpITp0dtGCDhr fVuCu3zlg49ijaokTZTo27uG7Gjn2P hI8 PDPERoUB318bWbfAJ5sUNFcuGRTYUqV/3ogfXp1rWlMc6awJjiAAd2fm4ogXjz56aypOoIde4OE5u/F9x199dlXnnGiHZWEYbGpsAEA3QXYnHwEFliKAgswgJ8LPeiUXGwedCAKABACCN EA1pYIIYaFlcDhytd51sGAJbo3onOpajiihlO92KHGaUXGwWjUBChjSPiWJuOO/LYIm4v1tXfE6J4gCSJEZ7YgRYUNrkji9P55sF/ogxw5ZkSqIDaZBV6aSGYq/lGZplndkckZ98xoICbTcIJGQAZcNmdmUc210hs35nCyJ58fgmIKX5RQGOZowxaZwYA JaoKQwswGijBV4C6SiTUmpphMspJx9unX4KaimjDv9aaXOEBteBqmuuxgEHoLX6Kqx yXqqBANsgCtit4FWQAEkrNbpq7HSOmtwag5w57GrmlJBASEU18ADjUYb3ADTinIttsgSB1oJFfA63bduimuqKB1keqwUhoCSK374wbujvOSu4QG6UvxBRydcpKsav  Ca6G8A6Pr1x2kVMyHwsVxUALDq/krnrhPSOzXG1lUTIoffqGR7Goi2MAxbv6O2kEG56I7CSlRsEFKFVyovDJoIRTg7sugNRDGqCJzJgcKE0ywc0ELm6KBCCJo8DIPFeCWNGcyqNFE06ToAfV0HBRgxsvLThHn1oddQMrXj5DyAQgjEHSAJMWZwS3HPxT/QMbabI/iBCliMLEJKX2EEkomBAUCxRi42VDADxyTYDVogV wSChqmKxEKCDAYFDFj4OmwbY7bDGdBhtrnTQYOigeChUmc1K3QTnAUfEgGFgAWt88hKA6aCRIXhxnQ1yg3BCayK44EWdkUQcBByEQChFXfCB776aQsG0BIlQgQgE8qO26X1h8cEUep8ngRBnOy74E9QgRgEAC8SvOfQkh7FDBDmS43PmGoIiKUUEGkMEC/PJHgxw0xH74yx/3XnaYRJgMB8obxQW6kL9QYEJ0FIFgByfIL7/IQAlvQwEpnAC7DtLNJCKUoO/w45c44GwCXiAFB/OXAATQryUxdN4LfFiwgjCNYg kYMIEFkCKDs6PKAIJouyGWMS1FSKJOMRB/BoIxYJIUXFUxNwoIkEKPAgCBZSQHQ1A2EWDfDEUVLyADj5AChSIQW6gu10bE/JG2VnCZGfo4R4d0sdQoBAHhPjhIB94v/wRoRKQWGRHgrhGSQJxCS 0pCZbEhAAOw==", true);
    }

    public async Task ShoPicture(String Image)
    {
        try
        {
            await uriHelper.NavigateTo(Image);
        }
        catch (Exception ex)
        {
        }
    }
}

In fact, I used the following method to display the photo. But I did not reach any result. The photo is displayed in the current tab. But when I add the _blank option to the file selection to display the photo in the new Tab, only a blank page is displayed. Please advise.

        private void gotopageImage()
        {
            uriHelper.NavigateTo("data:image/gif;base64,R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/z595kzAP/s7P goOXMv8 fhw/v739/f 8PD98fH/8mJl fn/9ZWb8/PzWlwv///6wWGbImAPgTEMImIN9gUFCEm/gDALULDN8PAD6atYdCTX9gUNKlj8wZAKUsAOzZz UMAOsJAP/Z2ccMDA8PD/95eX5NWvsJCOVNQPtfX/8zM8 QePLl38MGBr8JCP zs9myn/8GBqwpAP/GxgwJCPny78lzYLgjAJ8vAP9fX/ MjMUcAN8zM/9wcM8ZGcATEL QePdZWf/29uc/P9cmJu9MTDImIN /r7 /vz8/P8VNQGNugV8AAF9fX8swMNgTAFlDOICAgPNSUnNWSMQ5MBAQEJE3QPIGAM9AQMqGcG9vb6MhJsEdGM8vLx8fH98AANIWAMuQeL8fABkTEPPQ0OM5OSYdGFl5jo Pj/ pqcsTE78wMFNGQLYmID4dGPvd3UBAQJmTkP 8vH9QUK vr8ZWSHpzcJMmILdwcLOGcHRQUHxwcK9PT9DQ0O/v70w5MLypoG8wKOuwsP/g4P/Q0IcwKEswKMl8aJ9fX2xjdOtGRs/Pz Dg4GImIP8gIH0sKEAwKKmTiKZ8aB/f39Wsl LFt8dgUE9PT5x5aHBwcP AgP WltdgYMyZfyywz78AAAAAAAD///8AAP9mZv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKgALAAAAAA9AEQAAAj/AFEJHEiwoMGDCBMqXMiwocAbBww4nEhxoYkUpzJGrMixogkfGUNqlNixJEIDB0SqHGmyJSojM1bKZOmyop0gM3Oe2liTISKMOoPy7GnwY9CjIYcSRYm0aVKSLmE6nfq05QycVLPuhDrxBlCtYJUqNAq2bNWEBj6ZXRuyxZyDRtqwnXvkhACDV euTeJm1Ki7A73qNWtFiF /gA95Gly2CJLDhwEHMOUAAuOpLYDEgBxZ4GRTlC1fDnpkM fOqD6DDj1aZpITp0dtGCDhr fVuCu3zlg49ijaokTZTo27uG7Gjn2P hI8 PDPERoUB318bWbfAJ5sUNFcuGRTYUqV/3ogfXp1rWlMc6awJjiAAd2fm4ogXjz56aypOoIde4OE5u/F9x199dlXnnGiHZWEYbGpsAEA3QXYnHwEFliKAgswgJ8LPeiUXGwedCAKABACCN EA1pYIIYaFlcDhytd51sGAJbo3onOpajiihlO92KHGaUXGwWjUBChjSPiWJuOO/LYIm4v1tXfE6J4gCSJEZ7YgRYUNrkji9P55sF/ogxw5ZkSqIDaZBV6aSGYq/lGZplndkckZ98xoICbTcIJGQAZcNmdmUc210hs35nCyJ58fgmIKX5RQGOZowxaZwYA JaoKQwswGijBV4C6SiTUmpphMspJx9unX4KaimjDv9aaXOEBteBqmuuxgEHoLX6Kqx yXqqBANsgCtit4FWQAEkrNbpq7HSOmtwag5w57GrmlJBASEU18ADjUYb3ADTinIttsgSB1oJFfA63bduimuqKB1keqwUhoCSK374wbujvOSu4QG6UvxBRydcpKsav  Ca6G8A6Pr1x2kVMyHwsVxUALDq/krnrhPSOzXG1lUTIoffqGR7Goi2MAxbv6O2kEG56I7CSlRsEFKFVyovDJoIRTg7sugNRDGqCJzJgcKE0ywc0ELm6KBCCJo8DIPFeCWNGcyqNFE06ToAfV0HBRgxsvLThHn1oddQMrXj5DyAQgjEHSAJMWZwS3HPxT/QMbabI/iBCliMLEJKX2EEkomBAUCxRi42VDADxyTYDVogV wSChqmKxEKCDAYFDFj4OmwbY7bDGdBhtrnTQYOigeChUmc1K3QTnAUfEgGFgAWt88hKA6aCRIXhxnQ1yg3BCayK44EWdkUQcBByEQChFXfCB776aQsG0BIlQgQgE8qO26X1h8cEUep8ngRBnOy74E9QgRgEAC8SvOfQkh7FDBDmS43PmGoIiKUUEGkMEC/PJHgxw0xH74yx/3XnaYRJgMB8obxQW6kL9QYEJ0FIFgByfIL7/IQAlvQwEpnAC7DtLNJCKUoO/w45c44GwCXiAFB/OXAATQryUxdN4LfFiwgjCNYg kYMIEFkCKDs6PKAIJouyGWMS1FSKJOMRB/BoIxYJIUXFUxNwoIkEKPAgCBZSQHQ1A2EWDfDEUVLyADj5AChSIQW6gu10bE/JG2VnCZGfo4R4d0sdQoBAHhPjhIB94v/wRoRKQWGRHgrhGSQJxCS 0pCZbEhAAOw==", true);
}

CodePudding user response:

You can use javascript and html frame to show images that sent as byte to new page. as I used javascript in Blazor page in this link. at first create a javascript file and name it shobytefilejs.js. then find index.html in wwwroot folder. then copy following method into the js file.

function window_download(datauri) {
    
    var iframe = "<iframe width='100%' height='100%' src='"   datauri   "'></iframe>"
    var x = window.open();
    x.document.open();
    x.document.write(iframe);
    x.document.close();
}

Then inject @inject IJSRuntime _jsRuntime; in your page or component. After that, in you Blazor page or Blazor component define a method something like bellow:

public async Task RunMyJs(String Image)
{
    try
    {
        await _jsRuntime.InvokeVoidAsync("window_download", "data:image/gif;base64,"   Image);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

finally call your method in you html code like follow:

<a @onclick="@(() => RunMyJs(Convert.ToBase64String(@itms.Photo)))" style="cursor:pointer;">
<img id="myImg" src="data:image/jpeg;base64, @Convert.ToBase64String(@itms.Photo)" style="cursor:pointer;" />
</a>
  • Related