Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将blob URL转换为普通URL_Javascript_Url_Blob - Fatal编程技术网

Javascript 将blob URL转换为普通URL

Javascript 将blob URL转换为普通URL,javascript,url,blob,Javascript,Url,Blob,我的页面生成如下URL:“blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f”如何将其转换为正常地址 我将它用作属性。从JavaScriptBlob创建的URL无法转换为“正常”URL blob:URL不是指服务器上存在的数据,而是指浏览器当前内存中当前页面的数据。它在其他页面上不可用,在其他浏览器中不可用,在其他计算机上也不可用 因此,一般来说,将BlobURL转换为“正常”URL是没有意义的。如果您想要一个普

我的页面生成如下URL:
“blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f”
如何将其转换为正常地址


我将它用作
属性。

从JavaScript
Blob
创建的URL无法转换为“正常”URL

blob:
URL不是指服务器上存在的数据,而是指浏览器当前内存中当前页面的数据。它在其他页面上不可用,在其他浏览器中不可用,在其他计算机上也不可用

因此,一般来说,将
Blob
URL转换为“正常”URL是没有意义的。如果您想要一个普通的URL,您必须将数据从浏览器发送到服务器,并让服务器使其像普通文件一样可用

至少在Chrome中,可以将
blob:
URL转换为
data:
URL。您可以使用AJAX请求从
blob:
URL“获取”数据(即使它实际上只是从浏览器内存中提取数据,而不是发出HTTP请求)

下面是一个例子:

var blob=newblob([“你好,世界!”],{type:'text/plain'});
var blobUrl=URL.createObjectURL(blob);
var xhr=新的XMLHttpRequest;
xhr.responseType='blob';
xhr.onload=函数(){
var recoveredBlob=xhr.response;
var reader=新文件读取器;
reader.onload=函数(){
var blobAsDataUrl=reader.result;
window.location=blobAsDataUrl;
};
reader.readAsDataURL(recoveredBlob);
};
xhr.open('GET',blobUrl);

xhr.send()从JavaScript
Blob
创建的URL无法转换为“正常”URL

blob:
URL不是指服务器上存在的数据,而是指浏览器当前内存中当前页面的数据。它在其他页面上不可用,在其他浏览器中不可用,在其他计算机上也不可用

因此,一般来说,将
Blob
URL转换为“正常”URL是没有意义的。如果您想要一个普通的URL,您必须将数据从浏览器发送到服务器,并让服务器使其像普通文件一样可用

至少在Chrome中,可以将
blob:
URL转换为
data:
URL。您可以使用AJAX请求从
blob:
URL“获取”数据(即使它实际上只是从浏览器内存中提取数据,而不是发出HTTP请求)

下面是一个例子:

var blob=newblob([“你好,世界!”],{type:'text/plain'});
var blobUrl=URL.createObjectURL(blob);
var xhr=新的XMLHttpRequest;
xhr.responseType='blob';
xhr.onload=函数(){
var recoveredBlob=xhr.response;
var reader=新文件读取器;
reader.onload=函数(){
var blobAsDataUrl=reader.result;
window.location=blobAsDataUrl;
};
reader.readAsDataURL(recoveredBlob);
};
xhr.open('GET',blobUrl);

xhr.send()从blob url创建数据url的另一种方法可能是使用画布

var canvas = document.createElement("canvas")
var context = canvas.getContext("2d")
context.drawImage(img, 0, 0) // i assume that img.src is your blob url
var dataurl = canvas.toDataURL("your prefer type", your prefer quality)

正如我在mdn中所看到的,canvas.toDataURL受到浏览器的良好支持。(除了ie之外,从blob url创建数据url的另一种方法可能是使用canvas

var canvas = document.createElement("canvas")
var context = canvas.getContext("2d")
context.drawImage(img, 0, 0) // i assume that img.src is your blob url
var dataurl = canvas.toDataURL("your prefer type", your prefer quality)

正如我在mdn中看到的,canvas.toDataURL受到浏览器的良好支持。(如前一个答案所述,除了ie之外,没有办法将其解码回url,即使您尝试从chrome devtools面板查看它,url可能仍然编码为blob

然而,获取数据是可能的,获取数据的另一种方法是将数据放入锚并直接下载

<a href="blob:http://example.com/xxxx-xxxx-xxxx-xxxx" download>download</a>

将其插入包含blob url的页面,然后单击按钮,即可获得内容


另一种方法是通过代理服务器拦截ajax调用,然后您可以查看真实的图像url。

正如前面的答案所说,没有办法将其解码回url,即使您尝试从chrome devtools面板查看它,url也可能仍然编码为blob

然而,获取数据是可能的,获取数据的另一种方法是将数据放入锚并直接下载

<a href="blob:http://example.com/xxxx-xxxx-xxxx-xxxx" download>download</a>

将其插入包含blob url的页面,然后单击按钮,即可获得内容


另一种方法是通过代理服务器拦截ajax调用,然后您可以查看真实的图像url。

对于那些来这里为我寻找下载blob url视频/音频的方法的人来说。简言之,您需要通过Chrome->网络选项卡在所需网页上找到一个*.m3u8文件并粘贴它变成一个VLC播放器


另一个指南向您展示了如何下载。

对于那些来这里寻找下载blob url视频/音频方法的人,对我来说。简言之,您需要通过Chrome->网络选项卡在所需网页上找到一个*.m3u8文件,并将其粘贴到VLC播放器中

另一个指南向您展示了如何使用。

找到了这个答案,并希望引用它,因为它看起来比公认的答案干净得多:

函数BLOBTODATURL(blob,回调){
var fileReader=newfilereader();
fileReader.onload=函数(e){callback(e.target.result);}
fileReader.readAsDataURL(blob);
}
找到此答案,并希望引用它,因为它看起来比公认的答案干净得多:

函数BLOBTODATURL(blob,回调){
var fileReader=newfilereader();
fileReader.onload=函数(e){callback(e.target.result);}
fileReader.readAsDataURL(blob);
}

我参加聚会迟到了

如果您想下载内容,只需立即使用
fetch

fetch(blobURL)
  .then(res => res.blob())
  .then(blob => /*do what you want with the blob here*/)

我很晚才去参加聚会

如果您想下载内容,只需立即使用
fetch

fetch(blobURL)
  .then(res => res.blob())
  .then(blob => /*do what you want with the blob here*/)
即使在德