J'ai une application Rails 5. J'utilise Carrierwave pour les téléchargements de fichiers. Je suis en mesure de télécharger avec succès dans les environnements de développement et de production, PDF, JPG, PNG. Cependant, doc, docx, xls, xlsx ne sont pas téléchargés. Le message d'erreur que je reçois est:Rails 5 et Carrierwave ne télécharge pas docx
Upfile Failed to manipulate with rmagick, maybe it is not an image?
Upfile est le nom de ma colonne de base de données (signifie UploadedFile).
Je vous guidera à travers ma configuration et les étapes que j'ai prises pour résoudre ce problème:
Je ces gemmes:
gem "rmagick"
gem 'carrierwave', '~> 1.0'
gem 'fog'
Dans mon CarrierWave fichier Uploader, je l'appelle:
include CarrierWave::RMagick
storage :fog
Je peux télécharger les formats pdf, png et jpg.
Cependant, quand je télécharge un fichier .docx je reçois ce message d'erreur:
Upfile translation missing: en.errors.messages.rmagick_processing_error
Pour résoudre ce message d'erreur, ajouter ce petit bijou:
gem 'carrierwave-i18n'
L'ajout de ce petit bijou permet de résoudre le problème, mais quand j'essaye de télécharger un dossier de docx, je reçois un différent message d'erreur:
Upfile Failed to manipulate with rmagick, maybe it is not an image?
Ainsi je procède à déboguer cette erreur. Je considère que peut-être ma bibliothèque ImageMagick est incomplète et manque un délégué qui me permet de reconnaître un fichier docx. Je regarde les délégués en exécutant:
convert -list configure
Le terminal me montre alors:
DELEGATES bzlib mpeg freetype gslib jng jpeg lcms lzma png ps tiff xml zlib
D'après ce que je vois avec les délégués, j'ai tous les composants nécessaires pour lire docx, doc, xlss, xls, etc. (Je crois que xml est le délégué qui me permet de lire un fichier docx, qui est interprété comme xml compressé?). C'est là que ma recherche se termine. S'il vous plaît aidez-moi à découvrir la solution d'ici?
[Réponse Trouvé] Merci à Maruf, j'ai été en mesure de trouver la réponse. Le code que j'avais dans mon fichier PDF Uploader est (pardonnez la nomenclature pdfuploader - je comptais l'utiliser uniquement pour pdfs mais ont été introduits formats Word et Excel):
class PdfUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :thumb do
process resize_to_fit: [200, 200]
end
def extension_whitelist
%w(pdf doc html docx jpg jpeg gif png txt mp3 xls xlsx)
end
end
La réponse à cette question a été la suppression de la bloc de code de version de pouce. J'avais l'impression que: thumb a été appelé optionnellement sur les images, mais il semble qu'il a fonctionné sur tous les téléchargements. J'aurais dû savoir! :/
Maruf! Tu as complètement raison. J'ai eu le code suivant: version: thumb do ... processus resize_to_fit: [200, 200] .. end (pardonnez le format pseudocode/sloppy). Cela créait le problème. Mes fichiers docx et xlsx sont maintenant téléchargés. Je vous remercie! –