react,javascript Image Url to File

39 lượt xem

profile picture

Ẩn danh

Ngày 26 Tháng 05

Em chào mng, em là junior dev còn ít kinh nghiệm nên mong được mọi người chỉ giáo. Em đang code bằng React. Em đang cần làm để sao cho khi user chỉnh sửa thông tin sản phẩm mà không sửa được ảnh thì phải gửi request nguyên object file ảnh không sửa được đó về cho server. Ảnh sản phẩm đang nhận CDN URL ở API, vậy làm thế nào để từ CDN URL đó mà ra được object File vậy ạ? Em cũng thử gu gồ và làm theo cách gọi url get rồi dùng blob() để tạo object File, nhưng size lại ra là 0 nên theo em hiểu thì cách này là để dùng cho trường hợp access local file, nhưng em không biết em hiểu vậy có đúng không.. Hay có cách nào khác tốt hơn không ạ?

Đánh giá câu hỏi ngay!

Hãy ấn Up Vote với những câu hỏi cụ thể và chi tiết

Hãy ấn Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.

1 câu trả lời

BEST

Ảnh đại diện của TrungQuanDev

Hmm... Về cách để Convert một URL sang File hoặc Blob thì a sẽ chia sẻ bên dưới. Nhưng trước tiên cần clear một chút, theo anh hiểu thì em đang ở vị trí FE, và code React. Em edit một sản phẩm đã có ảnh sẵn rồi, và muốn cập nhật ảnh khác cho cái sản phẩm đó. - Trong trường hợp cập nhật ảnh khác bị lỗi, nếu nhìn từ góc độ FE thì lúc em gửi file ảnh đó lên, em đã có cái file ảnh lỗi đó dạng File hoặc Blob rồi mà, em cũng có thể xử lý phần request gửi file ảnh bị lỗi đó lên server trong phần catch lỗi ở function gọi api update sản phẩm là được => đâu cần phải convert url gì đâu ta? - Tuy nhiên anh đang thấy spec đoạn này hơi sạn, có vấn đề chút, hoặc là do em chưa mô tả kỹ hơn, nên anh cứ nói theo ý hiểu của anh trước đã nhé: - Khi em update ảnh hay nói chung cho tất cả là em muốn gửi file lên server thì đầu tiên em sẽ validate file ảnh cẩn thận ở phía FE React trước, sau đó gọi api để gửi file lên server cho phía BE, việc còn lại là ở phía BE xử lý đẩy ảnh đó lên Cloud rồi lấy url ảnh về, nếu như không update được url ảnh cho sản phẩm trong Database, mà muốn lưu log file lại để check thì việc này cũng nên do BE làm luôn chứ không cần thiết để FE phải tốn công request thêm một phát nữa làm gì. - Quay trở lại với vụ Convert một URL sang File thì em đang hiểu đúng rồi, em sẽ cần fetch cái file đó về, có response rồi có thể dùng nhiều cách tùy theo trường hợp mà em cần, ví dụ new File([response.blob]) hoặc dùng FileReader với readAsDataURL của cái response đó. Anh ví dụ một đoạn code, cũng như có để luôn một cái link Stackoverflow về phần này bên dưới, em có thể tham khảo thêm những cách làm trong link này nhé: - https://stackoverflow.com/a/41752161/8324172

1async function getFileFromUrl(url, name, defaultType = 'image/jpeg'){
2  const response = await fetch(url)
3  const data = await response.blob()
4  return new File([data], name, {
5    type: data.type || defaultType
6  })
7}
8// Lưu ý await ở đây anh để ví dụ, còn lúc gọi thì nhớ await phải nằm trong scope của async nhé:
9const file = await getFileFromUrl('https://example.com/image.jpg', 'example.jpg')

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.

Xem thêm

Đồng ý với Điều khoản dịch vụ Chính sách bảo mật của Careerly

Bạn đã có tài khoản rồi?

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.