github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/mime/type_unix.go (about)

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // +build aix darwin dragonfly freebsd js,wasm linux netbsd openbsd solaris
     6  
     7  package mime
     8  
     9  import (
    10  	"bufio"
    11  	"os"
    12  	"strings"
    13  )
    14  
    15  func init() {
    16  	osInitMime = initMimeUnix
    17  }
    18  
    19  var typeFiles = []string{
    20  	"/etc/mime.types",
    21  	"/etc/apache2/mime.types",
    22  	"/etc/apache/mime.types",
    23  	"/etc/httpd/conf/mime.types",
    24  }
    25  
    26  func loadMimeFile(filename string) {
    27  	f, err := os.Open(filename)
    28  	if err != nil {
    29  		return
    30  	}
    31  	defer f.Close()
    32  
    33  	scanner := bufio.NewScanner(f)
    34  	for scanner.Scan() {
    35  		fields := strings.Fields(scanner.Text())
    36  		if len(fields) <= 1 || fields[0][0] == '#' {
    37  			continue
    38  		}
    39  		mimeType := fields[0]
    40  		for _, ext := range fields[1:] {
    41  			if ext[0] == '#' {
    42  				break
    43  			}
    44  			setExtensionType("."+ext, mimeType)
    45  		}
    46  	}
    47  	if err := scanner.Err(); err != nil {
    48  		panic(err)
    49  	}
    50  }
    51  
    52  func initMimeUnix() {
    53  	for _, filename := range typeFiles {
    54  		loadMimeFile(filename)
    55  	}
    56  }
    57  
    58  func initMimeForTests() map[string]string {
    59  	typeFiles = []string{"testdata/test.types"}
    60  	return map[string]string{
    61  		".T1":  "application/test",
    62  		".t2":  "text/test; charset=utf-8",
    63  		".png": "image/png",
    64  	}
    65  }