راکت

عدم نمایش عکس

18 پاسخ

سلام. یک select tag هست که option های خودش رو از api، به آدرس api/images میگیره و هیچ مشکلی هم وجود نداره. یک تگ image هم هست که تصویر اون باید مطابق با select option انتخابی باشه. مثلا api/images/brand.png . ولی وقتی از این url استفاده میکنم ارور 401که مربوط به unauthorize هست رو دریافت میکنم.
من option های select رو با استفاده از کد زیر دریافت میکنم:

let apiToken = localStorage.getItem("token")
        const config = {
            headers: { Authorization: `Bearer ${apiToken}` }
        };
    axios.get(
            `http://localhost:5289/api/image`, config).then(response => {
                console.log(response.data)
                this.setState({
                    selectListOptions: [...response.data]

                })

و کدی که تصویر رو میخوام نشون بدم اینه:

<img className="img-fluid img-thumbnail" 
                            alt="Header"  
                            src="http://localhost:5289/api/image/brand.png" // to show image

                            />

چه کاری انجام بدم تا تصویر به درستی نمایش داده بشه و ارور 401 رو دریافت نکنم؟ این هم اضافه بکنم که توی postman و با bearer token ، بدون هیچ مشکلی عکس api/images/brand.png رو دریافت میکنم.
@hesammousavi
@mohsenbostan

ثبت پرسش جدید

پاسخ‌ها

18
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@parastooebrahimi
سلام. کانفیگ رو به این صورت تغییر بدید :

const config = {
    headers: {  "Authorization": `Bearer ${apiToken}` }
};
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

خطای ۴۰۱ مربوط به Authorization هست..
چک کنید ببینید وقتی توکن رو پاس میدید، سیستم اون رو دریافت و قبول میکنه؟

شاید پاسخ شما همین‌جا باشد

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@mohsenbostan
تغییر دادم ولی باز هم ارور دریافت میکنم...

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

توکن رو توی کد اول پاس میدم که وقتی لاگ میگیرم کل اسم عکس ها رو بدون هیچ مشکلی توی یک آرایه واسم میاره. ولی وقتی یک عکس رو میخوام نمایش بده ارور میده. در صورتی که همون یک عکس هم در پوست من بدون هیچ مشکلی میاره...
@ali.bayat

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@parastooebrahimi
با استفاده از تب Network کروم درخواست رو بررسی کند.ببینید Authorization وجود داره یا خیر.

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

خیر وجود نداره.. ولی واسه نشون دادن عکس توی تک ایمیج چجوری اتوریزیشن رو انجام بدم که با توکن هست؟

<img className="img-fluid img-thumbnail" 
                            alt="Header"  
                            src="http://localhost:5289/api/image/brand.png" // to show image

                            />

@mohsenbostan

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

الام اومدم با get عکس رو دریافت کردم.

axios.get(
                    `http://localhost:5629`, config).then(response => {
                        console.log(response)
                        this.setState({
                            HeaderImage:response.data

                        })

                    }

الان ارور ندارم دیگه ولی لاگ که میگیرم ببینم چی دریافت کردم اینه:
"�PNG
↵↵
چجوری نمایش بدم عکسو؟
@mohsenbostan
@hesammousavi
@ali.bayat

میلاد کریمی
میلاد کریمی
@mihancivil

تخصص: برنامه نویس Frontend

API به شما نام عکس رو قرار هست بده یا اینکه فایل باینری عکس رو ؟

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

نام عکس رو به راحتی دریافت میکنم. در حقیقت من لینک عکس رو میخواستم تا بتونم عکس رو نمایش بدم. ولی چون ارور داد اون رو get کردم. الان باینری نمایش میده.. من میخوام عکس نمایش داده بشه..
@mihancivil

میلاد کریمی
میلاد کریمی
@mihancivil

تخصص: برنامه نویس Frontend

روت عکس در همین url و پورت هست؟ نمیتونید یک آدرس ثابت درنظر بگیرید و فقط نام عکس رو جایگذاری کنید؟

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

بله روت عکس همین url و پورت هست... نه متاسفانه. هر کاری باید بکنم با همین چیزهاییه که وجود داره
@mihancivil

میلاد کریمی
میلاد کریمی
@mihancivil

تخصص: برنامه نویس Frontend

یه خروجی از پاسخ API اینجا بذارید، از قسمت network

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@parastooebrahimi
از کد زیر استفاده کنید تا اون باینری رو تبدیل کنید :

function hexToBase64(str) {
    return btoa(String.fromCharCode.apply(null, str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")));
}

و بعد میتونید این طوری استفاده کنید :

var img = document.createElement('img');
img.src = 'data:image/jpeg;base64,' + hexToBase64('your-binary-data');
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

انجام دادم.. الان به این صورت شد:

<img class="img-fluid img-thumbnail" alt="Header" src="data:image/jpg;base64,AAAAAAAAAAAAAAAAAAAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAA=">

ولی هنوز تصویر رو نمایش نمیده!!
@mohsenbostan

میلاد کریمی
میلاد کریمی
@mihancivil

تخصص: برنامه نویس Frontend

شما میتونید پسوند فایل، نام فایل و اطلاعات دیگه رو از اون پاسخ api دریافت کنید و تصویر رو نمایش بدید.

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@hesammousavi
لطف میکنید راهنمایی کنید چه کاری انجام بدم.. همه چیو امتحان کردم ولی درست نشد

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@mohsenbostan
راه دیگه ای نیست بشه عکسی که نیاز هست به اینکه هدر jwt داشته باشه رو نمایش داد؟ تقریبا همه چیزو امتحان کردم ولی نشد..

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@parastooebrahimi
برای کانفیگ مورد زیر رو استفاده کنید و دوباره تست کنید :

 responseType: 'arraybuffer' 

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام