[{"data":1,"prerenderedAt":1433},["ShallowReactive",2],{"content:\u002F2025\u002F07\u002Fgo-minio":3,"surround:\u002F2025\u002F07\u002Fgo-minio":1422},{"id":4,"title":5,"body":6,"categories":1400,"date":1402,"description":1403,"draft":1404,"extension":1405,"image":1406,"meta":1407,"navigation":459,"path":1409,"permalink":1406,"published":1406,"readingTime":1410,"recommend":1406,"references":1406,"seo":1415,"sitemap":1416,"stem":1417,"tags":1418,"type":1420,"updated":1402,"__hash__":1421},"content\u002Fposts\u002F2025\u002F07\u002Fgo-minio.md","Go 使用 MinIO SDK 上传文件",{"type":7,"value":8,"toc":1394},"minimark",[9,13,18,44,47,272,286,289,424,430,439,442,1387,1390],[10,11,12],"p",{},"今天我们来研究一下minio go上传文件，主要是minio是一款开源的分布式存储服务，遵循S3协议，自己搭建可以省去买OSS的钱",[14,15,17],"h2",{"id":16},"下载minio对应的go-sdk","下载minio对应的go sdk",[19,20,25],"pre",{"className":21,"code":22,"language":23,"meta":24,"style":24},"language-bash shiki shiki-themes github-light github-dark","go get github.com\u002Fminio\u002Fminio-go\u002Fv7\n","bash","",[26,27,28],"code",{"__ignoreMap":24},[29,30,33,37,41],"span",{"class":31,"data-line":32,"line":32},"line",1,[29,34,36],{"class":35},"sScJk","go",[29,38,40],{"class":39},"sZZnC"," get",[29,42,43],{"class":39}," github.com\u002Fminio\u002Fminio-go\u002Fv7\n",[14,45,46],{"id":46},"初始化go客户端",[19,48,51],{"className":49,"code":50,"language":36,"meta":24,"style":24},"language-go shiki shiki-themes github-light github-dark","func NewMinioClient(endpoint string, accessKeyID string, secretAccessKey string, useSSL bool) *minio.Client {\n\tminioClient, err := minio.New(endpoint, &minio.Options{\n\t\tCreds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, \"\"),\n\t\tSecure: useSSL,\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn minioClient\n}\n",[26,52,53,120,158,184,194,207,229,246,256,267],{"__ignoreMap":24},[29,54,55,59,62,66,70,73,77,80,82,84,87,89,91,94,97,100,103,106,109,112,115,117],{"class":31,"data-line":32,"line":32},[29,56,58],{"class":57},"szBVR","func",[29,60,61],{"class":35}," NewMinioClient",[29,63,65],{"class":64},"sSDpw","(",[29,67,69],{"class":68},"s4XuR","endpoint",[29,71,72],{"class":57}," string",[29,74,76],{"class":75},"sVt8B",", ",[29,78,79],{"class":68},"accessKeyID",[29,81,72],{"class":57},[29,83,76],{"class":75},[29,85,86],{"class":68},"secretAccessKey",[29,88,72],{"class":57},[29,90,76],{"class":75},[29,92,93],{"class":68},"useSSL",[29,95,96],{"class":57}," bool",[29,98,99],{"class":64},")",[29,101,102],{"class":75}," ",[29,104,105],{"class":57},"*",[29,107,108],{"class":35},"minio",[29,110,111],{"class":75},".",[29,113,114],{"class":35},"Client",[29,116,102],{"class":75},[29,118,119],{"class":64},"{\n",[29,121,123,127,130,133,136,139,142,145,148,150,152,155],{"class":31,"data-line":122,"line":122},2,[29,124,126],{"class":125},"indent","\t",[29,128,129],{"class":75},"minioClient, err ",[29,131,132],{"class":57},":=",[29,134,135],{"class":75}," minio.",[29,137,138],{"class":35},"New",[29,140,65],{"class":141},"sJX2D",[29,143,144],{"class":75},"endpoint, ",[29,146,147],{"class":57},"&",[29,149,108],{"class":35},[29,151,111],{"class":75},[29,153,154],{"class":35},"Options",[29,156,119],{"class":157},"sqkie",[29,159,161,163,165,168,171,173,176,179,181],{"class":31,"data-line":160,"line":160},3,[29,162,126],{"class":125},[29,164,126],{"class":125},[29,166,167],{"class":75},"Creds:  credentials.",[29,169,170],{"class":35},"NewStaticV4",[29,172,65],{"class":64},[29,174,175],{"class":75},"accessKeyID, secretAccessKey, ",[29,177,178],{"class":39},"\"\"",[29,180,99],{"class":64},[29,182,183],{"class":75},",\n",[29,185,187,189,191],{"class":31,"data-line":186,"line":186},4,[29,188,126],{"class":125},[29,190,126],{"class":125},[29,192,193],{"class":75},"Secure: useSSL,\n",[29,195,197,199,201,204],{"class":31,"data-line":196,"line":196},5,[29,198,126],{"class":125},[29,200,24],{"class":75},[29,202,203],{"class":157},"}",[29,205,206],{"class":141},")\n",[29,208,210,212,215,218,221,225,227],{"class":31,"data-line":209,"line":209},6,[29,211,126],{"class":125},[29,213,214],{"class":57},"if",[29,216,217],{"class":75}," err ",[29,219,220],{"class":57},"!=",[29,222,224],{"class":223},"sj4cs"," nil",[29,226,102],{"class":75},[29,228,119],{"class":141},[29,230,232,234,236,239,241,244],{"class":31,"data-line":231,"line":231},7,[29,233,126],{"class":125},[29,235,126],{"class":125},[29,237,238],{"class":35},"panic",[29,240,65],{"class":157},[29,242,243],{"class":75},"err",[29,245,206],{"class":157},[29,247,249,251,253],{"class":31,"data-line":248,"line":248},8,[29,250,126],{"class":125},[29,252,24],{"class":75},[29,254,255],{"class":141},"}\n",[29,257,259,261,264],{"class":31,"data-line":258,"line":258},9,[29,260,126],{"class":125},[29,262,263],{"class":57},"return",[29,265,266],{"class":75}," minioClient\n",[29,268,270],{"class":31,"data-line":269,"line":269},10,[29,271,255],{"class":64},[273,274,275],"blockquote",{},[10,276,277,278,281,282,285],{},"注意一下这个endpoint需要填写",[26,279,280],{"code":280},"Fully Qualified URL",", 填写形如",[26,283,284],{"code":284},"cdn.codepzj.cn","即可",[14,287,288],{"id":288},"上传本地文件",[19,290,292],{"className":49,"code":291,"language":36,"meta":24,"style":24},"objectName := \"1.txt\"      \u002F\u002F 上传的文件命名\nfilePath := \".\u002Ftest\u002F1.txt\" \u002F\u002F 本地文件路径\nuploadFile, err := client.FPutObject(context.Background(), config.Storage.Bucket, objectName, filePath, minio.PutObjectOptions{ContentType: \"text\u002Fplain; charset=utf-8\"})\nif err != nil {\n\tlog.Println(err.Error())\n\tpanic(\"上传失败\")\n}\n",[26,293,294,308,321,369,383,407,420],{"__ignoreMap":24},[29,295,296,299,301,304],{"class":31,"data-line":32,"line":32},[29,297,298],{"class":75},"objectName ",[29,300,132],{"class":57},[29,302,303],{"class":39}," \"1.txt\"",[29,305,307],{"class":306},"sJ8bj","      \u002F\u002F 上传的文件命名\n",[29,309,310,313,315,318],{"class":31,"data-line":122,"line":122},[29,311,312],{"class":75},"filePath ",[29,314,132],{"class":57},[29,316,317],{"class":39}," \".\u002Ftest\u002F1.txt\"",[29,319,320],{"class":306}," \u002F\u002F 本地文件路径\n",[29,322,323,326,328,331,334,336,339,342,344,346,349,351,353,356,359,362,365,367],{"class":31,"data-line":160,"line":160},[29,324,325],{"class":75},"uploadFile, err ",[29,327,132],{"class":57},[29,329,330],{"class":75}," client.",[29,332,333],{"class":35},"FPutObject",[29,335,65],{"class":64},[29,337,338],{"class":75},"context.",[29,340,341],{"class":35},"Background",[29,343,65],{"class":141},[29,345,99],{"class":141},[29,347,348],{"class":75},", config.Storage.Bucket, objectName, filePath, ",[29,350,108],{"class":35},[29,352,111],{"class":75},[29,354,355],{"class":35},"PutObjectOptions",[29,357,358],{"class":141},"{",[29,360,361],{"class":75},"ContentType: ",[29,363,364],{"class":39},"\"text\u002Fplain; charset=utf-8\"",[29,366,203],{"class":141},[29,368,206],{"class":64},[29,370,371,373,375,377,379,381],{"class":31,"data-line":186,"line":186},[29,372,214],{"class":57},[29,374,217],{"class":75},[29,376,220],{"class":57},[29,378,224],{"class":223},[29,380,102],{"class":75},[29,382,119],{"class":64},[29,384,385,387,390,393,395,398,401,403,405],{"class":31,"data-line":196,"line":196},[29,386,126],{"class":125},[29,388,389],{"class":75},"log.",[29,391,392],{"class":35},"Println",[29,394,65],{"class":141},[29,396,397],{"class":75},"err.",[29,399,400],{"class":35},"Error",[29,402,65],{"class":157},[29,404,99],{"class":157},[29,406,206],{"class":141},[29,408,409,411,413,415,418],{"class":31,"data-line":209,"line":209},[29,410,126],{"class":125},[29,412,238],{"class":35},[29,414,65],{"class":141},[29,416,417],{"class":39},"\"上传失败\"",[29,419,206],{"class":141},[29,421,422],{"class":31,"data-line":231,"line":231},[29,423,255],{"class":64},[10,425,426,427,429],{},"这只是一个上传本地文件的简单示例，当然",[26,428,108],{"code":108},"还提供了非常多的接口",[10,431,432,433],{},"可以参考一下 ",[434,435,436],"a",{"href":436,"rel":437},"https:\u002F\u002Fgithub.com\u002Fminio\u002Fminio-go\u002F",[438],"nofollow",[14,440,441],{"id":441},"完整代码",[19,443,445],{"className":49,"code":444,"language":36,"meta":24,"style":24},"package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com\u002Fminio\u002Fminio-go\u002Fv7\"\n\t\"github.com\u002Fminio\u002Fminio-go\u002Fv7\u002Fpkg\u002Fcredentials\"\n\t\"github.com\u002Fspf13\u002Fviper\"\n)\n\ntype Config struct {\n\tInfo    MinioInfo    `mapstructure:\"info\"`\n\tStorage MinioStorage `mapstructure:\"storage\"`\n}\n\ntype MinioInfo struct {\n\tEndpoint        string `mapstructure:\"endpoint\"`\n\tAccessKeyID     string `mapstructure:\"accessKey\"`\n\tSecretAccessKey string `mapstructure:\"secretKey\"`\n\tSecure          bool   `mapstructure:\"secure\"`\n}\n\ntype MinioStorage struct {\n\tBucket string `mapstructure:\"bucket\"`\n}\n\nfunc NewMinioClient(endpoint string, accessKeyID string, secretAccessKey string, useSSL bool) *minio.Client {\n\tminioClient, err := minio.New(endpoint, &minio.Options{\n\t\tCreds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, \"\"),\n\t\tSecure: useSSL,\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn minioClient\n}\n\nfunc main() {\n\t\u002F\u002F 读取配置文件\n\tviper.SetConfigFile(\".\u002Fconfig.yaml\") \u002F\u002F 设置配置文件路径\n\tif err := viper.ReadInConfig(); err != nil {\n\t\tlog.Fatalf(\"读取配置文件失败: %v\", err)\n\t}\n\tvar config Config\n\tif err := viper.Unmarshal(&config); err != nil {\n\t\tlog.Fatalf(\"解析配置文件失败: %v\", err)\n\t}\n\n\t\u002F\u002F 打印配置文件内容\n\tlog.Println(\"配置文件内容:\", config)\n\n\t\u002F\u002F 新建客户端\n\tinfo := config.Info\n\tclient := NewMinioClient(info.Endpoint, info.AccessKeyID, info.SecretAccessKey, info.Secure)\n\n\tobjectName := \"1.txt\"      \u002F\u002F 上传的文件命名\n\tfilePath := \".\u002Ftest\u002F1.txt\" \u002F\u002F 本地文件路径\n\tuploadFile, err := client.FPutObject(context.Background(), config.Storage.Bucket, objectName, filePath, minio.PutObjectOptions{ContentType: \"text\u002Fplain; charset=utf-8\"})\n\tif err != nil {\n\t\tlog.Println(err.Error())\n\t\tpanic(\"上传失败\")\n\t}\n\t\u002F\u002F 文件链接\n\tfmt.Printf(\"文件链接: https:\u002F\u002Fcdn.codepzj.cn\u002F%s\u002F%s\\n\", config.Storage.Bucket, objectName)\n\tfmt.Printf(\"上传成功, 文件大小为: %dB\\n\", uploadFile.Size)\n\n}\n",[26,446,447,455,461,471,484,495,506,510,521,532,543,548,553,569,583,597,602,607,621,635,648,661,675,680,685,699,712,717,722,769,796,817,826,837,854,869,878,887,892,897,913,921,944,976,1003,1012,1026,1061,1085,1094,1099,1107,1126,1131,1139,1152,1171,1176,1189,1202,1243,1260,1283,1298,1307,1315,1347,1377,1382],{"__ignoreMap":24},[29,448,449,452],{"class":31,"data-line":32,"line":32},[29,450,451],{"class":57},"package",[29,453,454],{"class":35}," main\n",[29,456,457],{"class":31,"data-line":122,"line":122},[29,458,460],{"emptyLinePlaceholder":459},true,"\n",[29,462,463,466,468],{"class":31,"data-line":160,"line":160},[29,464,465],{"class":57},"import",[29,467,102],{"class":75},[29,469,470],{"class":64},"(\n",[29,472,473,475,478,481],{"class":31,"data-line":186,"line":186},[29,474,126],{"class":125},[29,476,477],{"class":39},"\"",[29,479,480],{"class":35},"context",[29,482,483],{"class":39},"\"\n",[29,485,486,488,490,493],{"class":31,"data-line":196,"line":196},[29,487,126],{"class":125},[29,489,477],{"class":39},[29,491,492],{"class":35},"fmt",[29,494,483],{"class":39},[29,496,497,499,501,504],{"class":31,"data-line":209,"line":209},[29,498,126],{"class":125},[29,500,477],{"class":39},[29,502,503],{"class":35},"log",[29,505,483],{"class":39},[29,507,508],{"class":31,"data-line":231,"line":231},[29,509,460],{"emptyLinePlaceholder":459},[29,511,512,514,516,519],{"class":31,"data-line":248,"line":248},[29,513,126],{"class":125},[29,515,477],{"class":39},[29,517,518],{"class":35},"github.com\u002Fminio\u002Fminio-go\u002Fv7",[29,520,483],{"class":39},[29,522,523,525,527,530],{"class":31,"data-line":258,"line":258},[29,524,126],{"class":125},[29,526,477],{"class":39},[29,528,529],{"class":35},"github.com\u002Fminio\u002Fminio-go\u002Fv7\u002Fpkg\u002Fcredentials",[29,531,483],{"class":39},[29,533,534,536,538,541],{"class":31,"data-line":269,"line":269},[29,535,126],{"class":125},[29,537,477],{"class":39},[29,539,540],{"class":35},"github.com\u002Fspf13\u002Fviper",[29,542,483],{"class":39},[29,544,546],{"class":31,"data-line":545,"line":545},11,[29,547,206],{"class":64},[29,549,551],{"class":31,"data-line":550,"line":550},12,[29,552,460],{"emptyLinePlaceholder":459},[29,554,556,559,562,565,567],{"class":31,"data-line":555,"line":555},13,[29,557,558],{"class":57},"type",[29,560,561],{"class":35}," Config",[29,563,564],{"class":57}," struct",[29,566,102],{"class":75},[29,568,119],{"class":64},[29,570,572,574,577,580],{"class":31,"data-line":571,"line":571},14,[29,573,126],{"class":125},[29,575,576],{"class":75},"Info    ",[29,578,579],{"class":35},"MinioInfo",[29,581,582],{"class":39},"    `mapstructure:\"info\"`\n",[29,584,586,588,591,594],{"class":31,"data-line":585,"line":585},15,[29,587,126],{"class":125},[29,589,590],{"class":75},"Storage ",[29,592,593],{"class":35},"MinioStorage",[29,595,596],{"class":39}," `mapstructure:\"storage\"`\n",[29,598,600],{"class":31,"data-line":599,"line":599},16,[29,601,255],{"class":64},[29,603,605],{"class":31,"data-line":604,"line":604},17,[29,606,460],{"emptyLinePlaceholder":459},[29,608,610,612,615,617,619],{"class":31,"data-line":609,"line":609},18,[29,611,558],{"class":57},[29,613,614],{"class":35}," MinioInfo",[29,616,564],{"class":57},[29,618,102],{"class":75},[29,620,119],{"class":64},[29,622,624,626,629,632],{"class":31,"data-line":623,"line":623},19,[29,625,126],{"class":125},[29,627,628],{"class":75},"Endpoint        ",[29,630,631],{"class":57},"string",[29,633,634],{"class":39}," `mapstructure:\"endpoint\"`\n",[29,636,638,640,643,645],{"class":31,"data-line":637,"line":637},20,[29,639,126],{"class":125},[29,641,642],{"class":75},"AccessKeyID     ",[29,644,631],{"class":57},[29,646,647],{"class":39}," `mapstructure:\"accessKey\"`\n",[29,649,651,653,656,658],{"class":31,"data-line":650,"line":650},21,[29,652,126],{"class":125},[29,654,655],{"class":75},"SecretAccessKey ",[29,657,631],{"class":57},[29,659,660],{"class":39}," `mapstructure:\"secretKey\"`\n",[29,662,664,666,669,672],{"class":31,"data-line":663,"line":663},22,[29,665,126],{"class":125},[29,667,668],{"class":75},"Secure          ",[29,670,671],{"class":57},"bool",[29,673,674],{"class":39},"   `mapstructure:\"secure\"`\n",[29,676,678],{"class":31,"data-line":677,"line":677},23,[29,679,255],{"class":64},[29,681,683],{"class":31,"data-line":682,"line":682},24,[29,684,460],{"emptyLinePlaceholder":459},[29,686,688,690,693,695,697],{"class":31,"data-line":687,"line":687},25,[29,689,558],{"class":57},[29,691,692],{"class":35}," MinioStorage",[29,694,564],{"class":57},[29,696,102],{"class":75},[29,698,119],{"class":64},[29,700,702,704,707,709],{"class":31,"data-line":701,"line":701},26,[29,703,126],{"class":125},[29,705,706],{"class":75},"Bucket ",[29,708,631],{"class":57},[29,710,711],{"class":39}," `mapstructure:\"bucket\"`\n",[29,713,715],{"class":31,"data-line":714,"line":714},27,[29,716,255],{"class":64},[29,718,720],{"class":31,"data-line":719,"line":719},28,[29,721,460],{"emptyLinePlaceholder":459},[29,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767],{"class":31,"data-line":724,"line":724},29,[29,726,58],{"class":57},[29,728,61],{"class":35},[29,730,65],{"class":64},[29,732,69],{"class":68},[29,734,72],{"class":57},[29,736,76],{"class":75},[29,738,79],{"class":68},[29,740,72],{"class":57},[29,742,76],{"class":75},[29,744,86],{"class":68},[29,746,72],{"class":57},[29,748,76],{"class":75},[29,750,93],{"class":68},[29,752,96],{"class":57},[29,754,99],{"class":64},[29,756,102],{"class":75},[29,758,105],{"class":57},[29,760,108],{"class":35},[29,762,111],{"class":75},[29,764,114],{"class":35},[29,766,102],{"class":75},[29,768,119],{"class":64},[29,770,772,774,776,778,780,782,784,786,788,790,792,794],{"class":31,"data-line":771,"line":771},30,[29,773,126],{"class":125},[29,775,129],{"class":75},[29,777,132],{"class":57},[29,779,135],{"class":75},[29,781,138],{"class":35},[29,783,65],{"class":141},[29,785,144],{"class":75},[29,787,147],{"class":57},[29,789,108],{"class":35},[29,791,111],{"class":75},[29,793,154],{"class":35},[29,795,119],{"class":157},[29,797,799,801,803,805,807,809,811,813,815],{"class":31,"data-line":798,"line":798},31,[29,800,126],{"class":125},[29,802,126],{"class":125},[29,804,167],{"class":75},[29,806,170],{"class":35},[29,808,65],{"class":64},[29,810,175],{"class":75},[29,812,178],{"class":39},[29,814,99],{"class":64},[29,816,183],{"class":75},[29,818,820,822,824],{"class":31,"data-line":819,"line":819},32,[29,821,126],{"class":125},[29,823,126],{"class":125},[29,825,193],{"class":75},[29,827,829,831,833,835],{"class":31,"data-line":828,"line":828},33,[29,830,126],{"class":125},[29,832,24],{"class":75},[29,834,203],{"class":157},[29,836,206],{"class":141},[29,838,840,842,844,846,848,850,852],{"class":31,"data-line":839,"line":839},34,[29,841,126],{"class":125},[29,843,214],{"class":57},[29,845,217],{"class":75},[29,847,220],{"class":57},[29,849,224],{"class":223},[29,851,102],{"class":75},[29,853,119],{"class":141},[29,855,857,859,861,863,865,867],{"class":31,"data-line":856,"line":856},35,[29,858,126],{"class":125},[29,860,126],{"class":125},[29,862,238],{"class":35},[29,864,65],{"class":157},[29,866,243],{"class":75},[29,868,206],{"class":157},[29,870,872,874,876],{"class":31,"data-line":871,"line":871},36,[29,873,126],{"class":125},[29,875,24],{"class":75},[29,877,255],{"class":141},[29,879,881,883,885],{"class":31,"data-line":880,"line":880},37,[29,882,126],{"class":125},[29,884,263],{"class":57},[29,886,266],{"class":75},[29,888,890],{"class":31,"data-line":889,"line":889},38,[29,891,255],{"class":64},[29,893,895],{"class":31,"data-line":894,"line":894},39,[29,896,460],{"emptyLinePlaceholder":459},[29,898,900,902,905,907,909,911],{"class":31,"data-line":899,"line":899},40,[29,901,58],{"class":57},[29,903,904],{"class":35}," main",[29,906,65],{"class":64},[29,908,99],{"class":64},[29,910,102],{"class":75},[29,912,119],{"class":64},[29,914,916,918],{"class":31,"data-line":915,"line":915},41,[29,917,126],{"class":125},[29,919,920],{"class":306},"\u002F\u002F 读取配置文件\n",[29,922,924,926,929,932,934,937,939,941],{"class":31,"data-line":923,"line":923},42,[29,925,126],{"class":125},[29,927,928],{"class":75},"viper.",[29,930,931],{"class":35},"SetConfigFile",[29,933,65],{"class":141},[29,935,936],{"class":39},"\".\u002Fconfig.yaml\"",[29,938,99],{"class":141},[29,940,102],{"class":75},[29,942,943],{"class":306},"\u002F\u002F 设置配置文件路径\n",[29,945,947,949,951,953,955,958,961,963,965,968,970,972,974],{"class":31,"data-line":946,"line":946},43,[29,948,126],{"class":125},[29,950,214],{"class":57},[29,952,217],{"class":75},[29,954,132],{"class":57},[29,956,957],{"class":75}," viper.",[29,959,960],{"class":35},"ReadInConfig",[29,962,65],{"class":141},[29,964,99],{"class":141},[29,966,967],{"class":75},"; err ",[29,969,220],{"class":57},[29,971,224],{"class":223},[29,973,102],{"class":75},[29,975,119],{"class":141},[29,977,979,981,983,985,988,990,993,996,998,1001],{"class":31,"data-line":978,"line":978},44,[29,980,126],{"class":125},[29,982,126],{"class":125},[29,984,389],{"class":75},[29,986,987],{"class":35},"Fatalf",[29,989,65],{"class":157},[29,991,992],{"class":39},"\"读取配置文件失败: ",[29,994,995],{"class":223},"%v",[29,997,477],{"class":39},[29,999,1000],{"class":75},", err",[29,1002,206],{"class":157},[29,1004,1006,1008,1010],{"class":31,"data-line":1005,"line":1005},45,[29,1007,126],{"class":125},[29,1009,24],{"class":75},[29,1011,255],{"class":141},[29,1013,1015,1017,1020,1023],{"class":31,"data-line":1014,"line":1014},46,[29,1016,126],{"class":125},[29,1018,1019],{"class":57},"var",[29,1021,1022],{"class":75}," config ",[29,1024,1025],{"class":35},"Config\n",[29,1027,1029,1031,1033,1035,1037,1039,1042,1044,1046,1049,1051,1053,1055,1057,1059],{"class":31,"data-line":1028,"line":1028},47,[29,1030,126],{"class":125},[29,1032,214],{"class":57},[29,1034,217],{"class":75},[29,1036,132],{"class":57},[29,1038,957],{"class":75},[29,1040,1041],{"class":35},"Unmarshal",[29,1043,65],{"class":141},[29,1045,147],{"class":57},[29,1047,1048],{"class":75},"config",[29,1050,99],{"class":141},[29,1052,967],{"class":75},[29,1054,220],{"class":57},[29,1056,224],{"class":223},[29,1058,102],{"class":75},[29,1060,119],{"class":141},[29,1062,1064,1066,1068,1070,1072,1074,1077,1079,1081,1083],{"class":31,"data-line":1063,"line":1063},48,[29,1065,126],{"class":125},[29,1067,126],{"class":125},[29,1069,389],{"class":75},[29,1071,987],{"class":35},[29,1073,65],{"class":157},[29,1075,1076],{"class":39},"\"解析配置文件失败: ",[29,1078,995],{"class":223},[29,1080,477],{"class":39},[29,1082,1000],{"class":75},[29,1084,206],{"class":157},[29,1086,1088,1090,1092],{"class":31,"data-line":1087,"line":1087},49,[29,1089,126],{"class":125},[29,1091,24],{"class":75},[29,1093,255],{"class":141},[29,1095,1097],{"class":31,"data-line":1096,"line":1096},50,[29,1098,460],{"emptyLinePlaceholder":459},[29,1100,1102,1104],{"class":31,"data-line":1101,"line":1101},51,[29,1103,126],{"class":125},[29,1105,1106],{"class":306},"\u002F\u002F 打印配置文件内容\n",[29,1108,1110,1112,1114,1116,1118,1121,1124],{"class":31,"data-line":1109,"line":1109},52,[29,1111,126],{"class":125},[29,1113,389],{"class":75},[29,1115,392],{"class":35},[29,1117,65],{"class":141},[29,1119,1120],{"class":39},"\"配置文件内容:\"",[29,1122,1123],{"class":75},", config",[29,1125,206],{"class":141},[29,1127,1129],{"class":31,"data-line":1128,"line":1128},53,[29,1130,460],{"emptyLinePlaceholder":459},[29,1132,1134,1136],{"class":31,"data-line":1133,"line":1133},54,[29,1135,126],{"class":125},[29,1137,1138],{"class":306},"\u002F\u002F 新建客户端\n",[29,1140,1142,1144,1147,1149],{"class":31,"data-line":1141,"line":1141},55,[29,1143,126],{"class":125},[29,1145,1146],{"class":75},"info ",[29,1148,132],{"class":57},[29,1150,1151],{"class":75}," config.Info\n",[29,1153,1155,1157,1160,1162,1164,1166,1169],{"class":31,"data-line":1154,"line":1154},56,[29,1156,126],{"class":125},[29,1158,1159],{"class":75},"client ",[29,1161,132],{"class":57},[29,1163,61],{"class":35},[29,1165,65],{"class":141},[29,1167,1168],{"class":75},"info.Endpoint, info.AccessKeyID, info.SecretAccessKey, info.Secure",[29,1170,206],{"class":141},[29,1172,1174],{"class":31,"data-line":1173,"line":1173},57,[29,1175,460],{"emptyLinePlaceholder":459},[29,1177,1179,1181,1183,1185,1187],{"class":31,"data-line":1178,"line":1178},58,[29,1180,126],{"class":125},[29,1182,298],{"class":75},[29,1184,132],{"class":57},[29,1186,303],{"class":39},[29,1188,307],{"class":306},[29,1190,1192,1194,1196,1198,1200],{"class":31,"data-line":1191,"line":1191},59,[29,1193,126],{"class":125},[29,1195,312],{"class":75},[29,1197,132],{"class":57},[29,1199,317],{"class":39},[29,1201,320],{"class":306},[29,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241],{"class":31,"data-line":1204,"line":1204},60,[29,1206,126],{"class":125},[29,1208,325],{"class":75},[29,1210,132],{"class":57},[29,1212,330],{"class":75},[29,1214,333],{"class":35},[29,1216,65],{"class":141},[29,1218,338],{"class":75},[29,1220,341],{"class":35},[29,1222,65],{"class":157},[29,1224,99],{"class":157},[29,1226,348],{"class":75},[29,1228,108],{"class":35},[29,1230,111],{"class":75},[29,1232,355],{"class":35},[29,1234,358],{"class":157},[29,1236,361],{"class":75},[29,1238,364],{"class":39},[29,1240,203],{"class":157},[29,1242,206],{"class":141},[29,1244,1246,1248,1250,1252,1254,1256,1258],{"class":31,"data-line":1245,"line":1245},61,[29,1247,126],{"class":125},[29,1249,214],{"class":57},[29,1251,217],{"class":75},[29,1253,220],{"class":57},[29,1255,224],{"class":223},[29,1257,102],{"class":75},[29,1259,119],{"class":141},[29,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281],{"class":31,"data-line":1262,"line":1262},62,[29,1264,126],{"class":125},[29,1266,126],{"class":125},[29,1268,389],{"class":75},[29,1270,392],{"class":35},[29,1272,65],{"class":157},[29,1274,397],{"class":75},[29,1276,400],{"class":35},[29,1278,65],{"class":64},[29,1280,99],{"class":64},[29,1282,206],{"class":157},[29,1284,1286,1288,1290,1292,1294,1296],{"class":31,"data-line":1285,"line":1285},63,[29,1287,126],{"class":125},[29,1289,126],{"class":125},[29,1291,238],{"class":35},[29,1293,65],{"class":157},[29,1295,417],{"class":39},[29,1297,206],{"class":157},[29,1299,1301,1303,1305],{"class":31,"data-line":1300,"line":1300},64,[29,1302,126],{"class":125},[29,1304,24],{"class":75},[29,1306,255],{"class":141},[29,1308,1310,1312],{"class":31,"data-line":1309,"line":1309},65,[29,1311,126],{"class":125},[29,1313,1314],{"class":306},"\u002F\u002F 文件链接\n",[29,1316,1318,1320,1323,1326,1328,1331,1334,1337,1340,1342,1345],{"class":31,"data-line":1317,"line":1317},66,[29,1319,126],{"class":125},[29,1321,1322],{"class":75},"fmt.",[29,1324,1325],{"class":35},"Printf",[29,1327,65],{"class":141},[29,1329,1330],{"class":39},"\"文件链接: https:\u002F\u002Fcdn.codepzj.cn\u002F",[29,1332,1333],{"class":223},"%s",[29,1335,1336],{"class":39},"\u002F",[29,1338,1339],{"class":223},"%s\\n",[29,1341,477],{"class":39},[29,1343,1344],{"class":75},", config.Storage.Bucket, objectName",[29,1346,206],{"class":141},[29,1348,1350,1352,1354,1356,1358,1361,1364,1367,1370,1372,1375],{"class":31,"data-line":1349,"line":1349},67,[29,1351,126],{"class":125},[29,1353,1322],{"class":75},[29,1355,1325],{"class":35},[29,1357,65],{"class":141},[29,1359,1360],{"class":39},"\"上传成功, 文件大小为: ",[29,1362,1363],{"class":223},"%d",[29,1365,1366],{"class":39},"B",[29,1368,1369],{"class":223},"\\n",[29,1371,477],{"class":39},[29,1373,1374],{"class":75},", uploadFile.Size",[29,1376,206],{"class":141},[29,1378,1380],{"class":31,"data-line":1379,"line":1379},68,[29,1381,460],{"emptyLinePlaceholder":459},[29,1383,1385],{"class":31,"data-line":1384,"line":1384},69,[29,1386,255],{"class":64},[10,1388,1389],{},"今天的分享就到这里~",[1391,1392,1393],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":24,"searchDepth":186,"depth":186,"links":1395},[1396,1397,1398,1399],{"id":16,"depth":122,"text":17},{"id":46,"depth":122,"text":46},{"id":288,"depth":122,"text":288},{"id":441,"depth":122,"text":441},[1401],"Go语言","2025-07-31","MinIO 是一款开源的分布式对象存储服务，兼容 S3 协议，通过 Go SDK 可以轻松实现文件上传，只需初始化客户端并调用 FPutObject 方法即可完成文件存储，支持自定义 Content-Type 和私有化部署，是替代商业 OSS 的高性价比方案。",false,"md",null,{"slots":1408},{},"\u002F2025\u002F07\u002Fgo-minio",{"text":1411,"minutes":1412,"time":1413,"words":1414},"3 min read",2.27,136200,454,{"title":5,"description":1403},{"loc":1409},"posts\u002F2025\u002F07\u002Fgo-minio",[1419],"ioc","tech","jQ0LOgyQOUUct4rvdlpbj_nScRXsujddi1d8Vz27wlc",[1423,1428],{"title":1424,"path":1425,"stem":1426,"date":1427,"type":1420,"children":-1},"Go 使用 Gomail 发送邮件","\u002F2025\u002F07\u002Fgomail","posts\u002F2025\u002F07\u002Fgomail","2025-07-28",{"title":1429,"path":1430,"stem":1431,"date":1432,"type":1420,"children":-1},"Go Channel 基础概念与用法","\u002F2025\u002F08\u002Fgo-channel1","posts\u002F2025\u002F08\u002Fgo-channel1","2025-08-04",1786555056513]