zoukankan      html  css  js  c++  java
  • Chrome扩展实现网页图片右键上传(以E站图片搜索为例)

    近期有一个需求,客户要对其他网页中看到的图片在E站的搜图引擎里进行查询,但E站的搜索引擎只支持本地图片上传,客户需要先把图片保存到本地再上传比较麻烦。于是希望能有更快速的方法完成整个查询过程。在经过一番研究后,使用Chrome扩展完成了客户的需求。

    首先对E站的图片搜索抓包,发现是一个Content-type为multipart/form-data的POST行为,POST内容即为图片的二进制数据,Response为一个302重定向,到搜索结果页面。Charles抓包结果如下:

    于是确定总体思路:利用Chrome扩展的contextMenus配置右键菜单(对Chrome右键扩展开发不熟悉的推荐参考这篇文章),并为contentx为image的元素类型绑定post上传动作。实现的难点在于如何从<img>标签里拿到图片的二进制数据,话不多说,直接上代码:

     1 /* background.js */
     2 /* 其他文件代码略 */
     3 
     4 var ehentaiquery = chrome.contextMenus.create({"title": 'Ehentai-图片查询',id: 'menuDemo3',contexts: ['image'],onclick: queryimg});
     5 
     6 function queryimg(info, tab) {
     7     var src = info.srcUrl; //获取图片对象的src
     8     fetch(src).then(function(response) {
     9     if(!response.ok) {
    10         alert("图片请求错误");
    11         return;
    12         }
    13     var headers = response.headers;
    14     var ct = headers.get('Content-Type');
    15     var contentType = 'image/png';
    16     if(ct !== null){
    17       contentType = ct.split(';')[0];
    18     }
    19     
    20     var blob = response.blob().then(function(blob) {
    21     var formData = new FormData();
    22     formData.append('sfile', blob);
    23     formData.append('f_sfile', "search");
    24     formData.append('fs_similar', "on");
    25     $.ajax({
    26         cache: false,
    27         type: "POST",
    28         processData: false, //必须为false
    29         contentType: false, //必须为false
    30         url: "https://exhentai.org/upload/image_lookup.php",
    31         data: formData,
    32         dataType: "multipart/form-data",
    33         success: function(data, textStatus){
    34               console.log(data); //请求成功并不会进入success,而是进入error,希望有懂的老哥在评论解惑
    35         },
    36         error: function (request) {
    37             var contentText = request.responseText;
    38             var url = contentText.match(/var getrowurl = "(.+?)"/)[1];  //从返回数据中正则提取出搜索结果页面的url
    39             window.open(url, '_blank').location; //新窗口打开搜索结果页面
    40            }
    41     });
    42     });
    43 
    44   });
    45 }

    推而广之,在图床上传等问题上,这套方法也是适用的。

  • 相关阅读:
    VS2015&windows开发环境配置
    Chapter 12. Classes
    Chapter 11. Generic Algorithms
    Chapter 10. Associative Containers
    Chapter 9. Sequential Containers
    Chapter 8. The IO Library
    Chapter 7. Functions
    Chapter 5. Expressions
    案例分析 极化跳变
    机器如果能够实现自己建模,应该是下一次人工智能的飞跃点
  • 原文地址:https://www.cnblogs.com/qjfoidnh/p/13692399.html
Copyright © 2011-2022 走看看