Nelle rotaie, posso controllare se un file ZIP caricato è corrotto o non valido?
-
24-12-2019 - |
Domanda
Ho un'app rubino in cui i freelance possono completare i lavori per un datore di lavoro.Quando il lavoro è completo, il freelancer può caricare file per il datore di lavoro da revisione.Penso che il freelancer dovrebbe essere in grado di caricare file zip, ma non voglio che il freelancer fosse in grado di caricare file ZIP non validi o corrotti.C'è un modo per fermare questo o controllare se un file è valido.Sono abbastanza sicuro che se c'è un metodo o una funzione per farlo, sarà nella Biblioteca Rubyzip, ma ho guardato attraverso la loro documentazione e non riesco a trovare quello che sto cercando.
Soluzione
Ecco una soluzione ingenua che cerca di aprire un archivio ZIP, restituire true
se ha funzionato e false
se si è verificato un errore:
require 'zip'
def valid_zip?(file)
zip = Zip::File.open(file)
true
rescue StandardError
false
ensure
zip.close if zip
end
.
Credo che il formato ZIP includa i checksum CRC32 dei suoi contenuti.Se hai davvero bisogno che sia super veloce, potresti leggere quelli fuori dal file e controllare contro il checksum che hai calcolato.
Altri suggerimenti
Un altro modo semplice sarebbe essere semplicemente controlla con questa condizione, se il file viene caricato.
file = params[:file]
file.content_type.in?(['application/zip'])
.