"blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f"
。我该如何将它转换为普通地址?我将其用作<img>
标签的src
属性。"blob:http%3A//localhost%3A8383/568233a1-8b13-48b3-84d5-cca045ae384f"
。我该如何将它转换为普通地址?我将其用作<img>
标签的src
属性。从JavaScript Blob
创建的 URL 无法转换为“普通” URL。
blob:
URL 不是指在服务器上存在的数据,而是指您的浏览器当前在内存中为当前页面保留的数据。它将不可用于其他页面、其他浏览器或其他计算机。
因此,一般情况下,将 Blob
URL 转换为“普通” URL 没有意义。如果您想要一个普通 URL,则需要将数据从浏览器发送到服务器,并让服务器像普通文件一样提供该数据。
至少在 Chrome 中,可以将 blob:
URL 转换为 data:
URL。您可以使用 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,而且可能会非常大。但是它们确实像普通URL一样工作,因为它们可以被共享;它们不特定于当前浏览器或会话。
从 Blob URL 创建 Data 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<9,总是IE<9)
演示:
let blobToImage=(binaryUrl) => {
var canvas=document.createElement("canvas")
var img=document.createElement('img');
img.src=binaryUrl;
var context=canvas.getContext("2d")
context.drawImage(img, 0, 0);
return canvas.toDataURL();
}
let blobUrl = "https://cdn.pixabay.com/photo/2014/02/27/16/10/flowers-276014__340.jpg";
let imgUrl = blobToImage(blobUrl);
console.log(blobUrl);
console.log(imgUrl);
如果您想下载blob url视频/音频,这个回答对我有用。简而言之,您需要通过Chrome的网络选项卡在所需网页上找到一个*.m3u8文件,然后将其粘贴到VLC播放器中。
另一篇指南向您展示了如何使用VLC Player 保存流媒体文件。
更新:
从blob url下载视频的另一种方法是使用批量下载器并将文件合并在一起。
下载视频部分
你需要想办法提取那些链接。可以手动下载并编辑文件,也可以使用其他方法。如你所见,这些链接非常相似,唯一不同的是视频的序列号:'s-0-v1-a1.ts', 's-1-v1-a1.ts'等等。
https://some-website.net/del/8cf.m3u8/s-0-v1-a1.ts
以此类推,直到.m3u8播放列表文件中的最后一个链接。这些.ts文件实际上是你的视频。你需要下载它们。
对于批量下载,我更喜欢使用Chrome的Simple Mass Downloader扩展程序(https://chrome.google.com/webstore/detail/simple-mass-downloader/abdkkegmcbiomijcbdaodaflgehfffed)。
如果您选择使用Simple Mass Downloader,您需要:
a. 选择一个模式链接。
b. 在地址栏中输入您的链接,但只有一个修改:每个下一个视频变化的部分需要用方括号[0:400] 中的模式替换,其中0是第一个文件名,400是最后一个。所以您的链接应该长这样:https://some-website.net/del/8cf.m3u8/s-[0:400]-v1-a1.ts。
之后点击导入按钮将这些链接添加到Mass Downloader的下载列表中。
c. 接下来的操作可能会要求您为每个下载的视频指定目标文件夹。因此强烈建议在Chrome设置中指定默认下载文件夹并禁用Chrome设置中的选择目标选项。这将节省您很多时间!另外,您可能想要指定这些文件将存储在哪个文件夹中:
c1. 单击“全选”复选框以选择下载列表中的所有文件。
c2. 单击SMD扩展窗口右下角的“下载”按钮。它会带您进入下一个选项卡以开始下载。
c3. 点击“开始选择”,这将自动将所有视频下载到下载文件夹。
就是这样!只需等待所有文件下载完成,然后您就可以通过VLC播放器或支持.ts格式的任何其他播放器观看它们。但是,如果您想要一个视频而不是您已经下载的视频,请将这些迷你视频拼接在一起。
合并视频部分
由于我正在使用Mac,所以不知道Windows上该如何操作。如果您是Windows用户,并且想要合并这些视频,请随时在Google上搜索Windows解决方案。下面的步骤仅适用于Mac。
cat
并按下空格键.ts
视频的文件夹。选择您想要合并的所有.ts
视频(使用鼠标或cmd+A
)空格键
>
空格键
my_new_video.ts
。请注意,格式必须与原始视频相同,否则可能需要很长时间进行转换甚至失败!Enter
。等待终端完成合并过程,并享受观看视频的乐趣!我在这里找到了一个答案(链接),想引用它,因为它看起来比被接受的答案更简洁:
function blobToDataURL(blob, callback) {
var fileReader = new FileReader();
fileReader.onload = function(e) {callback(e.target.result);}
fileReader.readAsDataURL(blob);
}
这里是解决方案:
let blob = new Blob(chunks, { 'type' : 'video/mp4;' });
let videoURL = window.URL.createObjectURL(blob);
const blobF = await fetch(videoURL).then(res => res.blob())
video/mp4
,正确的应该是 octet/stream
。 - KingRider我来晚了。
如果你想下载内容,现在可以简单地使用 fetch
。
fetch(blobURL)
.then(res => res.blob())
.then(blob => /*do what you want with the blob here*/)
blob:https://example.com/123e4567-e89b-12d3-a456-426614174000
这样的 URL。我正在进一步调查…… - Gwyneth Llewelyn正如先前的回答所述,没有办法将其解码为URL,即使您尝试从Chrome开发工具面板中查看它,URL也可能仍然被编码为blob。
但是,可以获取数据,另一种获取数据的方法是将其放入锚点并直接下载。
<a href="blob:http://example.com/xxxx-xxxx-xxxx-xxxx" download>download</a>
localhost
链接。请查找其公共链接。(您正在使用哪个CDN?) - Raptor