MCPcopy Index your code
hub / github.com/TruthHun/BookStack / DownImage

Function DownImage

utils/util.go:786–842  ·  view source on GitHub ↗

下载图片

(src string, headers ...map[string]string)

Source from the content-addressed store, hash-verified

784
785// 下载图片
786func DownImage(src string, headers ...map[string]string) (filename string, err error) {
787 var resp *http.Response
788 var b []byte
789 ext := ".png"
790 src = strings.Replace(src, "/./", "/", -1)
791 file := cryptil.Md5Crypt(src)
792 filename = "cache/" + file
793 srcLower := strings.ToLower(src)
794 if strings.HasPrefix(srcLower, "$") {
795 //_, err = CopyFile(filename, strings.TrimPrefix(srcLower, "$"))
796 filename = filename + ext
797 err = os.Rename(strings.TrimPrefix(src, "$"), filename)
798 return
799 }
800
801 if strings.HasPrefix(srcLower, "data:image/") && strings.Contains(srcLower, ";base64,") { //base64的图片
802 slice := strings.Split(src, ";base64,")
803 if len(slice) >= 2 {
804 ext := "." + strings.TrimPrefix(slice[0], "data:image/")
805 filename = filename + strings.ToLower(ext)
806 b, err = base64.StdEncoding.DecodeString(strings.Join(slice[1:], ";base64,"))
807 if err != nil {
808 return
809 }
810 err = ioutil.WriteFile(filename, b, os.ModePerm)
811 }
812 return
813 }
814 //url链接图片
815 resp, err = util.BuildRequest("get", src, src, "", "", true, false, headers...).Response()
816 if err != nil {
817 if transfer == "" {
818 return
819 }
820 resp, err = util.BuildRequest("get", transfer+src, src, "", "", true, false, headers...).Response()
821 if err != nil {
822 return
823 }
824 }
825
826 defer resp.Body.Close()
827 if tmp := strings.TrimPrefix(strings.ToLower(resp.Header.Get("Content-Type")), "image/"); tmp != "" {
828 if strings.HasPrefix(strings.ToLower(tmp), "svg") {
829 tmp = "svg"
830 }
831 ext = "." + tmp
832 } else {
833 ext = strings.ToLower(filepath.Ext(srcLower))
834 }
835 filename = filename + ext
836 b, err = ioutil.ReadAll(resp.Body)
837 if err != nil {
838 return
839 }
840 err = ioutil.WriteFile(filename, b, os.ModePerm)
841 return
842}
843

Callers 2

ReleaseContentMethod · 0.92
CrawlHtml2MarkdownFunction · 0.85

Calls 2

ResponseMethod · 0.80
ReplaceMethod · 0.45

Tested by

no test coverage detected