如何处理具有"semi-image" URL 的丢弃事件(来自其他网站的"images")



半图像是什么意思?(如果您有更好的措辞 - 欢迎提出建议(

好吧,举个例子 - 转到谷歌图片(许多其他网站也是如此(并搜索"猫"。将第一项拖放到我的可放置区域只会给出一个 URL,该 URL 不完全是图像之一,例如- https://www.google.com/imgres?imgurl=https%3A%2F%2Fr.hswstatic.com%2Fw_907%2Fgif%2Ftesla-cat.jpg&imgrefurl=https%3A%2F%2Fanimals.howstuffworks.com%2Fpets%2Fteslas-cat-and-other-feline-fascinations.htm&docid=yTPSYBCDHgIU0M&tbnid=GTJT8CqjTKEtwM%3A&vet=10ahUKEwiYtpzaiKbdAhUytosKHSXeC4AQMwjhASgAMAA..i&w=907&h=510&bih=937&biw=1855&q=Cat&ved=0ahUKEwiYtpzaiKbdAhUytosKHSXeC4AQMwjhASgAMAA&iact=mrc&uact=8

这种"不仅仅是一个图像"的网址发生在许多不同的网站上 - 谷歌图片只是一个例子(大多数时候它实际上是一个图像文件,一切都很好(。 更具体地说,在 drop 事件处理程序中,

event.dataTransfer.getData("URL");

提供这种网址,并且

event.dataTransfer.files

只是该事件的空列表。

现在,请记住,用户实际看到的是将图像拖放到可放置区域 - 因此,如果这不适用于应该接受图像的东西,那对用户来说将是一种令人沮丧的体验。当我将这些半图像(来自任何网站(拖放到Google图像可放置区域时,一切正常,因此必须有办法。

我的问题是 - 如何处理此类事件并从中生成 Blob/a 文件对象?

如果您需要下载拖到可放置区域的图像,最好的方法是将URL发送到后端并从那里下载(任何后端技术都是合适的(。

通过快速的谷歌搜索,你可以找到一些相关的工作:[1]、[2] 和 [3]。

下面是一个小的代码示例,显示了它在 JavaScript 端是如何工作的:

// Get raw HTML from dropped element
var droppedHTML = evt.dataTransfer.getData('text/html');
// Assuming that the dropped element is an image, get the "src" attribute (URL)
var dropContext = $('<div>').append(droppedHTML);
var imgUrl = $(dropContext).find('img').attr('src');
// Now you can call your API via AJAX or some other way
$.post('analyze_image.php',
{
imgUrl: imgUrl,
},
function(response, status) {
// Feedback on response
}
);

然后,在你的后端,假设你有一个PHP服务器,你可以从那里下载,如这个堆栈溢出线程所示:

file_put_contents($imagePath, fopen($imgUrl, 'r'));

最新更新