golang图片地址直传阿里云,内容详情的图片替换
今天写了一个搬选的程序,自动把一个商城的商品(不是自己公司的商城程序)传到新的商城
需要的逻辑大概是先获取商品列表,再通过列表的id获取商品信息跟商品详情,再把这些数据保存到新的数据库,其中麻烦的一点就是图片如果直接用原程序的话,后期该商城过期了后图片地址会失效,所以需要把商品图片,轮播图,商品详情里面的图片都上传到自己服务器或者oss,并且替换掉数据里原来的地址
下面贴一下核心的图片地址上传到阿里云的代码
import ( "bytes" "fmt" "io/ioutil" "net/http" "os" "time" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) const ( key = "LTAI5t*******1TQhwznVK1" AccessKeySecret = "jthYx*******e9gfCGY2nSPO" Endpoint = "oss-cn-hangzhou.aliyuncs.com" BucketName = "li*****on" ) var ( long = 0 ti1 = int64(0) ) func Uploads(str []interface{}) []interface{} { for k, v := range str { str[k] = Upload(v.(string)) } return str } func Upload(url string) string { // 创建OSSClient实例。 client, err := oss.New(Endpoint, key, AccessKeySecret) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } t1 := time.Now().Unix() if ti1 != t1 { //如果时间戳不一样,那么归零 long = 0 } ti1 = t1 long++ obj := fmt.Sprintf("qby/%d%d.jpg", t1, long) // 获取存储空间。 bucket, err := client.Bucket(BucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 上传Byte数组。 err = bucket.PutObject(obj, bytes.NewReader(ReadImgData(url))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } return "https://" + BucketName + "." + Endpoint + "/" + obj } //获取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 xiangqin(id interface{}) (str string) { url := fmt.Sprintf("http://www.ch************************iyHtml?item_id=%v&sid=****", id) body, _ := HttpGet(url) //fmt.Printf("\n详情信息%+v"+url, body) //return if len(body["_diyHtml"].([]interface{})) == 0 { return } db := body["_diyHtml"].([]interface{})[0].(map[string]interface{})["content"].(map[string]interface{}) if db["fulltext"] == nil { return } str = db["fulltext"].(string) //此处是查找图片信息的正则 reg1 := regexp.MustCompile(`http://******p.cn\S*[.jpg|.gif|.png|.jpeg]@!w6本文来自投稿,不代表本人立场,如若转载,请注明出处;如有问题您可以发邮件到:itlun@qq.com