如何将图像源转换为 JavaScript 文件对象
How to convert image source into a JavaScript File object
我有一个图像 URL "https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg"
,想将其转换为 javaScript 文件类型对象。
: File
lastModified: 1591250106736
lastModifiedDate: Thu Jun 04 2020 11:25:06 GMT+0530 (India Standard
Time) {}
name: "7.jpeg"
size: 369742
type: "image/jpeg"
webkitRelativePath: ""
我假设您想 运行 在浏览器环境中执行此操作。
您可以使用本机 fetch()
方法,将响应读取为 Blob
并将其转换为 File
对象。
contentType
以实际下载的图片类型为准
您可以在此处详细了解将 Blob
转换为 File
的几种方法和浏览器支持:
Convert blob to file
How to convert Blob to File in JavaScript
const url = 'https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg?v=1572867553'
const fileName = 'myFile.jpg'
fetch(url)
.then(async response => {
const contentType = response.headers.get('content-type')
const blob = await response.blob()
const file = new File([blob], fileName, { contentType })
// access file here
})
将您的图像 src https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg
转换为 Base64 ULR
格式,然后将 Base64 URL
转换为 javaScript File
对象。
***Here is the code for converting "image source" (url) to "Base64".***
let url = 'https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg'
const toDataURL = url => fetch(url)
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
***Here is code for converting "Base64" to javascript "File Object".***
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
*** Calling both function ***
toDataURL(url)
.then(dataUrl => {
console.log('Here is Base64 Url', dataUrl)
var fileData = dataURLtoFile(dataUrl, "imageName.jpg");
console.log("Here is JavaScript File Object",fileData)
fileArr.push(fileData)
})
要获得更优雅的解决方案,请使用此
const getUrlExtension = (url) => {
return url
.split(/[#?]/)[0]
.split(".")
.pop()
.trim();
}
const onImageEdit = async (imgUrl) => {
var imgExt = getUrlExtension(imgUrl);
const response = await fetch(imgUrl);
const blob = await response.blob();
const file = new File([blob], "profileImage." + imgExt, {
type: blob.type,
});
}
我有一个图像 URL "https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg"
,想将其转换为 javaScript 文件类型对象。
: File
lastModified: 1591250106736
lastModifiedDate: Thu Jun 04 2020 11:25:06 GMT+0530 (India Standard
Time) {}
name: "7.jpeg"
size: 369742
type: "image/jpeg"
webkitRelativePath: ""
我假设您想 运行 在浏览器环境中执行此操作。
您可以使用本机 fetch()
方法,将响应读取为 Blob
并将其转换为 File
对象。
contentType
以实际下载的图片类型为准
您可以在此处详细了解将 Blob
转换为 File
的几种方法和浏览器支持:
Convert blob to file
How to convert Blob to File in JavaScript
const url = 'https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg?v=1572867553'
const fileName = 'myFile.jpg'
fetch(url)
.then(async response => {
const contentType = response.headers.get('content-type')
const blob = await response.blob()
const file = new File([blob], fileName, { contentType })
// access file here
})
将您的图像 src https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg
转换为 Base64 ULR
格式,然后将 Base64 URL
转换为 javaScript File
对象。
***Here is the code for converting "image source" (url) to "Base64".***
let url = 'https://cdn.shopify.com/s/files/1/0234/8017/2591/products/young-man-in-bright-fashion_925x_f7029e2b-80f0-4a40-a87b-834b9a283c39.jpg'
const toDataURL = url => fetch(url)
.then(response => response.blob())
.then(blob => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
}))
***Here is code for converting "Base64" to javascript "File Object".***
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
*** Calling both function ***
toDataURL(url)
.then(dataUrl => {
console.log('Here is Base64 Url', dataUrl)
var fileData = dataURLtoFile(dataUrl, "imageName.jpg");
console.log("Here is JavaScript File Object",fileData)
fileArr.push(fileData)
})
要获得更优雅的解决方案,请使用此
const getUrlExtension = (url) => {
return url
.split(/[#?]/)[0]
.split(".")
.pop()
.trim();
}
const onImageEdit = async (imgUrl) => {
var imgExt = getUrlExtension(imgUrl);
const response = await fetch(imgUrl);
const blob = await response.blob();
const file = new File([blob], "profileImage." + imgExt, {
type: blob.type,
});
}