上载Golang文件的Mime类型检查

Rah*_*uly 4 go mime-types

我正在尝试获取在服务器中上传的文件的mime类型。

.xlsx和.docx文件的mime类型来自application / zip。我试图解压缩文件并读取类型为“ _rels / .rels”的文件。我的疑问是,在读取此特定文件时,读取文件应保留的最大大小应该是多少?如果目标是“ xl / workbook.xml”,我可以假定它的类型是xlsx吗?

我的代码如下

 file, fileHeader, err := r.FormFile("file")

buffer := make([]byte, 512)
_, err = file.Read(buffer)
if err != nil {
    fmt.Println(err)
}

contentType := http.DetectContentType(buffer)
if contentType == "application/zip" {
    r, err := zip.NewReader(file, fileHeader.Size)
    if err != nil {
        fmt.Println(err)
    }
    for _, zf := range r.File {
        if zf.Name == "_rels/.rels" {
            fmt.Println("rels")
            rc, err := zf.Open()
            if err != nil {
                fmt.Println("Rels errors")
            }
            const BufferSize = 1000
            buffer := make([]byte, BufferSize)
            defer rc.Close()
            bytesread, err := rc.Read(buffer)
            if err != nil {
                if err != io.EOF {
                    fmt.Println(err)
                }
            }

            fmt.Println("bytes read: ", bytesread)
            fmt.Println("bytestream to string: ", string(buffer[:bytesread]))
            fmt.Println(rc)
        }
    }
}


var arr []byte
w.Header().Set("Content-Type", "application/json")
w.Write(arr)
Run Code Online (Sandbox Code Playgroud)

}

我得到的输出是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships     xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>
Run Code Online (Sandbox Code Playgroud)

关于如何阅读.doc或.xls的任何提示?

Gab*_*ile 5

不幸的是,DetectContentTypehtml包装中来说,它仅限于它可以检测到的mime类型。

至于检测二进制格式,如果您只需要告诉它是否是.doc,则无需读取整个文件。您可以只检查文件签名。文件签名的好资源是文件签名

如果您想使用现有软件包,则为github上的内容的摘要。

免责声明:我是mimetype的作者。

  • 文件类型

    • 纯粹,没有c绑定
    • 可以扩展到检测新的mime类型
    • 对于通过多个MIME类型(例如:xlsx和docx作为zip传递)的文件存在问题,因为它将匹配函数存储在映射中,因此不能保证遍历的顺序
  • 魔术师

    • 需要安装libmagic-dev
    • 可以扩展,尽管更难... man magic
  • 模仿型

    • 纯粹,没有c绑定
    • 可以扩展以检测新的mime类型
    • 较小的检测到的哑剧类型集