一尘不染

将Blob URL转换为普通URL

javascript

我的页面会生成这样的URL:"blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f"如何将其转换为普通地址?

我将其用作<img>src属性。


阅读 2047

收藏
2020-05-01

共1个答案

一尘不染

从JavaScript创建的URL Blob不能转换为“普通” URL。

一个blob:URL并不是指在服务器上存在的数据,它是指数据您的浏览器目前在存储器中,当前页面。它在其他页面上将不可用,在其他浏览器中将不可用,并且在其他计算机上将不可用。

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

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

这是一个例子:

var blob = new Blob(["Hello, world!"], { type: 'text/plain' });

var blobUrl = URL.createObjectURL(blob);



var xhr = new XMLHttpRequest;

xhr.responseType = 'blob';



xhr.onload = function() {

   var recoveredBlob = xhr.response;



   var reader = new FileReader;



   reader.onload = function() {

     var blobAsDataUrl = reader.result;

     window.location = blobAsDataUrl;

   };



   reader.readAsDataURL(recoveredBlob);

};



xhr.open('GET', blobUrl);

xhr.send();

data:URL可能不是您所说的“正常”,它可能会很大。但是,它们的确像普通URL一样工作,因为它们可以共享。它们不特定于当前的浏览器或会话。

2020-05-01