首页 > 其他分享 >go语言解决跨域的问题图片显示问题

go语言解决跨域的问题图片显示问题

时间:2023-11-17 09:45:08浏览次数:36  
标签:http 跨域 err url fmt 问题 go query name

来源:http://www.shanhubei.com/archives/2838.html

直接上代码

package main
 
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
 
//获取C的图片数据
func ReadImgData(url string) []byte {
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    pix, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    return pix
}
 
func myWeb(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
    w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型
  //w.Header().Set("content-type", "application/json") //返回数据格式是json
 
    query := r.URL.Query();
    var url string;
    var name string;
    if len(query["url"]) > 0{
        url = query["url"][0]
    }else {
        fmt.Fprintf(w, "");
        return ;
    }
 
    if len(query["name"]) > 0{
        name = query["name"][0];
        w.Header().Set("content-type", "application/octet-stream")
        w.Header().Set("Content-Disposition", "attachment; filename=" + name)
    }
 
    fmt.Println(url,name);
    pix := ReadImgData(url);
    w.Write(pix )
    //fmt.Fprintf(w, "这是一个开始");
}
 
func main() {
    http.HandleFunc("/", myWeb)
    fmt.Println("服务器即将开启,访问地址 http://localhost:3000")
    err := http.ListenAndServe(":3000", nil)
    if err != nil {
        fmt.Println("服务器开启错误: ", err)
    }
}

调用方式:

<img src="http://localhost:3000?url=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320&name=test.jpg" >

 

标签:http,跨域,err,url,fmt,问题,go,query,name
From: https://www.cnblogs.com/shanhubei/p/17837909.html

相关文章

  • Web服务端开发的线程问题
    Web服务端和线程安全问题 线程和类有关联吗?线程(Thread)和类(Class)在计算机编程中是两个不同但可以关联的概念。线程(Thread):线程是指在进程中执行的独立的执行单元。一个进程可以包含多个线程,它们共享进程的资源,但每个线程有自己的执行流。多线程的编程可以提高程序的并发性,......
  • Bitbucket克隆私有仓库密码报错问题
    使用gitclone克隆私有仓库的时候提示输入密码,输入登陆密码之后报错。这是因为Bitbucket要单独设置Apppassword才能使用gitclone命令,登陆密码仅用于登陆。方法就是Personalsettings这里设置一个Apppassword......
  • 实践6:班主任的问题
    题目描述小明是一名小学老师,某次考试后,他遇到了这样的问题:读入n名学生的成绩,将获得某一给定分数的学生人数输出。你能帮助他解决吗?输入格式第一行包含一个整数n(1≤n≤103),表示学生的人数。接下来一行输入n个整数f(0≤f≤102),表示各学生的成绩,整数间以空格间隔。最后一......
  • 工作中遇到的问题:如何根据根据某一字段进行数据去重
    需求:现在我有一个用户集合,集合中的各个用户的电话号码可能会重复,电话号码重复的用户只需要保留一个即可。用户实体:packagecom.javabasic.javabasic.workidea;importlombok.Data;importlombok.EqualsAndHashCode;importlombok.experimental.Accessors;importjava.io.Seri......
  • Go标准库学习:builtin
    Builtin模块最近在学Go,但感觉标准库中文资料不是很多,直接看官网文档又没有循序渐进的过程,所以自己在边看边记录,如有谬误还请指出,感谢。这部分总结了Go中内置的模块,不需要导包。来自Go的标准文档,版本是1.21.4。在类型方面是我自己的总结和理解。类型(types)Go语言提供的类型......
  • http请求问题
    在建立http请求的时候,一定要注意请求格式:publicstaticJSONObjecthttpRequest(StringrequestUrl,StringrequestMethod,StringoutputStr){JSONObjectjsonObject=null;StringBufferbuffer=newStringBuffer();try{URLurl=newURL(requestUrl);......
  • Django2.0以上版本path方法——路由层使用的转换器(五种)
    str#匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式int#匹配正整数,包含0。slug#匹配字母、数字以及横杠、下划线组成的字符串。uuid#匹配格式化的uuid,如075194d3-6885-417e-a8a8-6c931e272f00。path#匹配任何非空字符串,包含了路径分隔符(/)使用方式:p......
  • Redis 缓存系统常见问题及解决方案(缓存击穿,缓存穿透,缓存雪崩)
    1、缓存穿透缓存穿透指当用户在Redis缓存系统执行一条无效查询时,这条无效查询将穿透Redis缓存系统并向MySQL数据库请求数据,而MySQL数据库也获取不到数据。黑客可以利用缓存穿透原理,恶意执行大量无效查询,这将会对MySQL数据库的访问造成很大的压力解决方法:1、缓存......
  • golang channel
    ”不要以共享内存的方式来通信,相反,要通过通信来共享内存“golang的一个思想,不整文的,整点武的,具体来看channel怎么做的有一个很关键的golangMPG模型再单独分析,这篇先只分析channel定义//runtim/chan.gotypehchanstruct{ qcountuint//通道里的元素......
  • python 处理html中 class中存在空格 获取问题
     html="""<h1class='tdp1'>0000000000000000000000000</h1><h1class='tdp2'>123333333333333333333</h1><h1class='p2'>111111111111111111111111111111111111<......