MIME проверка типов файлов, загруженных Golang - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь получить файлы MIME, загружаемые на мой сервер.

В файлах MIME .xlsx и .docx указывается 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)

}

вывод, который я получаю

<?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>

Любые советы о том, как читать .doc или .xls?

1 Ответ

0 голосов
/ 11 сентября 2018

К сожалению, DetectContentType из пакета html довольно ограничен типами пантомимы, которые он может обнаружить.

Что касается обнаружения двоичных форматов, вам не нужно читать весь файл, если все, что вам нужно, это указать, является ли он .doc. Вы можете просто проверить подпись файла. Хороший ресурс для подписей файлов - подписей файлов

Если вы вместо этого хотите использовать существующие пакеты, это краткое изложение того, что находится на github.

Отказ от ответственности: я автор mimetype .

  • Filetype

    • чистый ход, без привязок
    • можно расширить для обнаружения новых типов пантомимы
    • имеет проблемы с файлами, которые передают более одного типа MIME (например, xlsx и docx, передавая в виде zip), потому что он хранит соответствующие функции на карте, таким образом, он не гарантирует порядок обхода
  • magicmime

    • нужен установленный libmagic-dev
    • можно продлить, хотя и сложнее ... man magic
  • mimetype

    • чистый ход, без привязок
    • может быть расширен для обнаружения новых типов пантомимы
    • меньший набор обнаруженных типов пантомимы
...