分类 神奇技巧 下的文章

各大图床 API

百度

//百度識圖的接口
func UploadToBaidu(img []byte, imgInfo string) string {
    body := new(bytes.Buffer)
    w := multipart.NewWriter(body)
    contentType := w.FormDataContentType()
    name := utils.GetFileNameByMimeType(imgInfo)
    file, _ := w.CreateFormFile("Filedata", name)
    _, _ = file.Write(img)
    _ = w.WriteField("file", "multipart")
    _ = w.Close()
    req, _ := http.NewRequest("POST", "https://api.uomg.com/api/image.baidu", body)
    req.Header.Set("Content-Type", contentType)
    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    data, _ := ioutil.ReadAll(resp.Body)
    baidu := bed.BaiduResp{}
    err := json.Unmarshal([]byte(string(data)), &baidu)
    if err != nil {
        logging.AppLogger.Error("Upload To Baidu fail", zap.Error(err))
        return ""
    }
    return string(baidu.ImgUrl)
}

奇虎360(Qihoo)

func UploadToQihoo(img []byte, imgInfo string, imgType string) string {
    url := "http://st.so.com/stu"
    name := utils.GetFileNameByMimeType(imgInfo)

    file := &utils.FormFile{
        Name:  name,
        Key:   "upload",
        Value: img,
        Type:  imgType,
    }
    var header map[string]string
    data := utils.FormPost(file, url, header)
    var re = regexp.MustCompile(`(?m)data-imgkey="(.*)"`)
    imgKey := re.FindAllStringSubmatch(data, -1)[0][1]
    url = "https://ps.ssl.qhmsg.com/" + imgKey
    return url
}

网易严选(NetEasy)

func UploadToNetEasy(img []byte, imgInfo string, imgType string) string {
    url := "http://you.163.com/xhr/file/upload.json"
    name := utils.GetFileNameByMimeType(imgInfo)

    file := &utils.FormFile{
        Name:  name,
        Key:   "file",
        Value: img,
        Type:  imgType,
    }
    var header map[string]string
    data := utils.FormPost(file, url, header)
    netEasy := bed.NetEasyResp{}

    _ = json.Unmarshal([]byte(data), &netEasy)
    return netEasy.Data[0]
}

京东(JD)

func UploadToJd(img []byte, imgInfo string, imgType string) string {
    url := "https://search.jd.com/image?op=upload"
    name := utils.GetFileNameByMimeType(imgInfo)

    file := &utils.FormFile{
        Name:  name,
        Key:   "file",
        Value: img,
        Type:  imgType,
    }
    var header map[string]string
    data := utils.FormPost(file, url, header)
    var pre = regexp.MustCompile(`(?m)ERROR`)

    if !pre.MatchString(data) {
        var re = regexp.MustCompile(`(?m)\("(.*)"\)`)
        imgFix := re.FindAllStringSubmatch(data, -1)[0][1]
        url = "https://img" + strconv.Itoa(rand.Intn(3)+11) + ".360buyimg.com/img/" + imgFix
        return url
    } else {
        return ""
    }

}

掘金(JueJin)

func UploadToJueJin(img []byte, imgInfo string, imgType string) string {
    url := "https://cdn-ms.juejin.im/v1/upload?bucket=gold-user-assets"
    name := utils.GetFileNameByMimeType(imgInfo)

    file := &utils.FormFile{
        Name:  name,
        Key:   "file",
        Value: img,
        Type:  imgType,
    }
    var header map[string]string
    data := utils.FormPost(file, url, header)
    juejin := bed.JueJinResp{}
    _ = json.Unmarshal([]byte(data), &juejin)

    //神奇三斷言 : )
    reJ, _ := juejin.D.(map[string]interface{})
    urls, _ := reJ["url"].(map[string]interface{})
    httpUrl, _ := urls["https"].(string)
    return httpUrl
}

阿里(Ali)

func UploadToAli(img []byte, imgInfo string, imgType string) string {
    url := "https://kfupload.alibaba.com/mupload"
    name := utils.GetFileNameByMimeType(imgInfo)

    file := &utils.FormFile{
        Name:  name,
        Key:   "file",
        Value: img,
        Type:  imgType,
    }
    //var header map[string]string
    data := utils.AliFormPost(file, url)
    ali := bed.AliResp{}
    _ = json.Unmarshal([]byte(data), &ali)
    return ali.Url
}

IntelliJ IDEA全局内容搜索和替换

很多时候,需要把整个项目里或指定文件夹下进行全局搜索和替换,如:修改已经固化的网页标题等。IntelliJ IDEA 就有这么一个功能。
除了 IntelliJ IDEA,还有它(指:JetBrains)旗下的 IDEA 也支持,如:PhpStorm、WebStorm、Pycharm、CLion 等
使用方法如下:

1. 全局搜索内容

快捷键:Ctrl + Shift + F
如果快捷键打不开,请手动在菜单栏找到 Edit -> Find -> Find in path,打开搜索窗口:
如果快捷键打不开,请手动在菜单栏找到 Edit -> Find -> Find in path,打开搜索窗口

- 阅读剩余部分 -

OpenWRT / Pandava 系统路由器放行 IPv4/IPv6 端口

序言

给路由器搭建 SS_server,使用路由器网络可以连接上路由器 SS_server,但是在手机数据下,使用 IPv6 连接 SS_server,连接不上,原因竟然是未开放端口,然后就有了本文

开放 IPv4 端口

举例开放 IPv4 1080 端口 TCP 和 UDP 协议
#以下是对公网开放 IPv4 TCP 1080 端口
iptables -A INPUT -p tcp --dport 1080 -j ACCEPT

#以下是对公网开放 IPv4 UDP 1080 端口
iptables -A INPUT -p udp --dport 1080 -j ACCEPT

开放 IPv6 端口

举例开放 IPv6 1080 端口 TCP 和 UDP 协议
#以下是对公网开放 IPv6 TCP协议 1080 端口
ip6tables -A INPUT -p tcp --dport 1080 -j ACCEPT

#以下是对公网开放 IPv6 UDP协议 1080 端口
ip6tables -A INPUT -p udp --dport 1080 -j ACCEPT

解决内网设备入站80/443端口开放:给FORWARD添加规则:
ip6tables -A FORWARD -p tcp --dport 80 -j ACCEPT
ip6tables -A FORWARD -p tcp --dport 443 -j ACCEPT

国内无污染 IPv4 / IPv6 DNS

清华大学 TUNA DNS

DNS666 提供 IPv4 与 IPv6 双栈服务——但无论您选择只使用 IPv4 的地址还是选择只使用 IPv6 的地址,都可以同时正常进行 IPv4 (A) 记录和 IPv6 (AAAA) 两种记录的查询,您可以在包括学生宿舍有线或无线网络、教学楼 Tsinghua Wi-Fi 等原生双栈网络下,或是 DIVI 等过渡网络下,正常进行具有 IPv4 和 IPv6 结果的域名查询。清华师生在使用有线网络时,可以使用这一服务进行域名查询,而无需进行校园网认证。

IPv4 DNS:

101.6.6.6

IPv6 DNS:

2001:da8::666

nslookup 测试结果:

响应的 IP 可以访问,但域名访问不了。。。。
Microsoft Windows [版本 10.0.18362.295]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\NowTime>nslookup - 2001:da8::666
默认服务器:  UnKnown
Address:  2001:da8::666

> wikipedia.org
服务器:  UnKnown
Address:  2001:da8::666

非权威应答:
名称:    wikipedia.org
Addresses:  2620:0:863:ed1a::1
          198.35.26.96

> zh.wikipedia.org
服务器:  UnKnown
Address:  2001:da8::666

非权威应答:
名称:    dyna.wikimedia.org
Addresses:  2620:0:863:ed1a::1
          198.35.26.96
Aliases:  zh.wikipedia.org

>

清华大学 TUNA 协会