Seperti yang terlihat di tempat lain , docx, xlsx dan pttx adalah ZIP. Saat mengunggahnya ke aplikasi web saya, file(via libmagicdan python-magic) mendeteksinya sebagai ZIP.
Saya menyimpan konten file sebagai gumpalan di database, tapi tentu saja saya tidak ingin mempercayai pengguna dengan jenis file apa ini. Jadi saya ingin mempercayai filedan secara otomatis menghasilkan nama file selama pengunduhan.
Saya tahu seseorang dapat memodifikasi /etc/magictetapi format ( magic(5)) terlalu rumit bagi saya. Saya menemukan laporan bug tentang masalah ini di bug Debian tetapi karena sejak 2008 sepertinya tidak diperbaiki dalam waktu dekat.
Saya kira satu-satunya alternatif saya adalah benar-benar mempercayai pengguna (tetapi masih menyimpan konten sebagai gumpalan) dan hanya memeriksa ekstensi file berdasarkan nama file. Dengan cara ini saya dapat melarang beberapa ekstensi dan mengizinkan yang lain. Dan ketika pengguna mengunduh ulang file-nya, ia dapat memilikinya dengan cara apa pun yang diunggahnya. Tetapi solusi ini tidak aman jika file tersebut dibagikan kepada orang lain, karena Anda dapat dengan mudah mengganti nama file untuk mengunggahnya.
0 string PK\x03\x04\x14\x00\x06\x00 Microsoft Office Open XML Format
di / etc / magic untuk mengidentifikasi tipe file umum berdasarkan informasi yang Anda berikan.
(Namun, ini mungkin tidak universal: PK\x03\x04\x00\x14\x08\x08telah diamati pada awal file XLSX yang dihasilkan LibreOffice.)
Versi Ubuntu selanjutnya dapat mengidentifikasi dengan benar file .docx, .pptx, dan .xlsx. Menggali kode sorce untuk utilitas file saya menemukan ~/file-5.09/magic/Magdir/msooxmlfile yang melakukan identifikasi. Anda bisa mendapatkan salinan file dan menambahkannya ke /etc/magicfile Anda .
Termasuk salinan file yang telah diperbarui ke v 1.5
# $File: msooxml,v 1.5 2014/08/05 07:38:45 christos Exp $
# msooxml: file(1) magic for Microsoft Office XML
# From: Ralf Brown <[email protected]>
# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
# archive. The first member file is normally "[Content_Types].xml".
# but some libreoffice generated files put this later. Perhaps skip
# the "[Content_Types].xml" test?
# Since MSOOXML doesn't have anything like the uncompressed "mimetype"
# file of ePub or OpenDocument, we'll have to scan for a filename
# which can distinguish between the three types
# start by checking for ZIP local file header signature
0 string PK\003\004
!:strength +10
# make sure the first file is correct
>0x1E regex \\[Content_Types\\]\\.xml|_rels/\\.rels
# skip to the second local file header
# since some documents include a 520-byte extra field following the file
# header, we need to scan for the next header
>>(18.l+49) search/2000 PK\003\004
# now skip to the *third* local file header; again, we need to scan due to a
# 520-byte extra field following the file header
>>>&26 search/1000 PK\003\004
# and check the subdirectory name to determine which type of OOXML
# file we have. Correct the mimetype with the registered ones:
# http://technet.microsoft.com/en-us/library/cc179224.aspx
>>>>&26 string word/ Microsoft Word 2007+
!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
>>>>&26 string ppt/ Microsoft PowerPoint 2007+
!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
>>>>&26 string xl/ Microsoft Excel 2007+
!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
>>>>&26 default x Microsoft OOXML
---
Tetapi meninggalkan V1.2 di sini untuk anak cucu.
Menyertakan salinan di sini sebagai tautan di atas dapat kedaluwarsa saat paket file diperbarui.
#------------------------------------------------------------------------------
# $File: msooxml,v 1.2 2013/01/25 23:04:37 christos Exp $
# msooxml: file(1) magic for Microsoft Office XML
# From: Ralf Brown <[email protected]>
# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
# archive. The first member file is normally "[Content_Types].xml".
# Since MSOOXML doesn't have anything like the uncompressed "mimetype"
# file of ePub or OpenDocument, we'll have to scan for a filename
# which can distinguish between the three types
# start by checking for ZIP local file header signature
0 string PK\003\004
# make sure the first file is correct
>0x1E string [Content_Types].xml
# skip to the second local file header
# since some documents include a 520-byte extra field following the file
# header, we need to scan for the next header
>>(18.l+49) search/2000 PK\003\004
# now skip to the *third* local file header; again, we need to scan due to a
# 520-byte extra field following the file header
>>>&26 search/1000 PK\003\004
# and check the subdirectory name to determine which type of OOXML
# file we have
# Correct the mimetype with the registered ones:
# http://technet.microsoft.com/en-us/library/cc179224.aspx
>>>>&26 string word/ Microsoft Word 2007+
!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
>>>>&26 string ppt/ Microsoft PowerPoint 2007+
!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
>>>>&26 string xl/ Microsoft Excel 2007+
!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
>>>>&26 default x Microsoft OOXML
!:strength +10
Saya menambahkan konten file itu (msooxml) ke / etc / magic (di debian) dan berhasil.
Jay K
Ini bekerja untuk saya juga - walaupun saya membuat kesalahan dengan menggunakan ~/file-5.11/magic/Magdir/msooxmlsumbernya, yang tidak berfungsi untuk beberapa file contoh powerpoint yang saya gunakan. Versi dalam file-5.17karya-karya hebat (mungkin ada hubungannya dengan tab atau ... tidak tahu).
dsummersl
FWIW, saya mencoba ini di Scientific Linux 6 tapi ternyata masih di file5.04, yang memotong tag tipe MIME di 64 karakter (tapi memperingatkan Anda tentang hal itu) seperti @ stanley-c sebutkan. Saya juga mencoba Mac OS X Mavericks, tetapi tidak bisa menerapkannya (meskipun memperingatkan saya tentang tidak perlu melarikan diri dari [dan. Pada aturan kedua).
jwadsack
perhatikan bahwa "Microsoft OOXML" juga dapat berupa file .docx, bukan hanya "Microsoft Word 2007+"
golimar
4
file, versi sebelum 5.13, akan memotong tipe MIME menjadi 64 karakter. Jadi menggunakan konten msooxml, tipe MIME dari file -bi perintah menjadi "mime application / vnd.openxmlformats-officedocument.wordprocessingml.d; charset = binary"
jika menggunakan docx libreoffice , Anda dapat menambahkan konten (di bawah) ke / etc / magic:
# start by checking for ZIP local file header signature
0 string PK\003\004
!:strength +10
>1104 search/300 PK\003\004
# and check the subdirectory name to determine which type of OOXML
# file we have. Correct the mimetype with the registered ones:
# http://technet.microsoft.com/en-us/library/cc179224.aspx
>>&26 string word/ Microsoft Word 2007+
!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
>>&26 string ppt/ Microsoft PowerPoint 2007+
!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
>>&26 string xl/ Microsoft Excel 2007+
!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
>>&26 default x Microsoft OOXML
Sudah mencoba ini, tetapi ini menyebabkan beberapa file xlsx yang sebelumnya tidak terdeteksi dengan benar terdeteksi, tetapi juga beberapa file xlsx yang sebelumnya terdeteksi dengan benar tidak terdeteksi lagi
~/file-5.11/magic/Magdir/msooxml
sumbernya, yang tidak berfungsi untuk beberapa file contoh powerpoint yang saya gunakan. Versi dalamfile-5.17
karya-karya hebat (mungkin ada hubungannya dengan tab atau ... tidak tahu).file
5.04, yang memotong tag tipe MIME di 64 karakter (tapi memperingatkan Anda tentang hal itu) seperti @ stanley-c sebutkan. Saya juga mencoba Mac OS X Mavericks, tetapi tidak bisa menerapkannya (meskipun memperingatkan saya tentang tidak perlu melarikan diri dari [dan. Pada aturan kedua).file, versi sebelum 5.13, akan memotong tipe MIME menjadi 64 karakter. Jadi menggunakan konten msooxml, tipe MIME dari file -bi perintah menjadi "mime application / vnd.openxmlformats-officedocument.wordprocessingml.d; charset = binary"
sumber
jika menggunakan docx libreoffice , Anda dapat menambahkan konten (di bawah) ke / etc / magic:
sumber