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