Recherche tuto sur l'upload de fichier


#1

Bonjour,

quelqu’un aurais un petit tutoriels sur l’upload d’image et de sa
manipulation dans un contrôleur.

je veux dire depuis le tag “file_field” et puis comment récuperer les
infos:

le lieux où se trouve l’image, sa taille, ses dimension etc…

d’avance merci.

MaitrePylos


#2

quelqu’un aurais un petit tutoriels sur l’upload d’image et de sa
manipulation dans un contrôleur.

je veux dire depuis le tag “file_field” et puis comment récuperer les
infos:

le lieux où se trouve l’image, sa taille, ses dimension etc…

d’avance merci.

Salut,

voici quelques liens glanés il y a quelques temps déjà , le plus simple
étant d’utiliser le plugin attachment_fu à mon avis :

http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu
http://www.myersds.com/notebook/2006/07/25/basic_file_uploads_with_rails
http://www.ruby-forum.com/topic/80427#new
http://www.ruby-forum.com/topic/74675#new


#3

Bonjour,

Quelques pistes…

Pour l’upload de fichier cela dépend si tu veux enregistrer dans la
base ou sur le serveur.

Voilà un exemple tout simple d’une de mes applis (requiert la
librairie “ftools” de ruby si mes souvenirs sont bon) pour enregistrer
sur le serveur:

#vérifie si le repertoire d’enregistrement existe sinon on le
créeif not File.exists? @path
FileUtils.mkdir_p @path
end

#enregistrement du fichier a proprement parlé
File.open("#{@path}#{@filename}", “wb”) do |f|
f.write(params[‘file_to_save’].read)
end

Pour la manipulation d’image je pense que l’api de référence est Rmagick

Voilà un petit exemple que j’ai codé (redimensionne une image si elle
est plus grande que la largeur ou/et hauteur maximale spécifiée):

img = Magick::Image.read("#{@path}#{@filename}")
img[0].change_geometry!("#{@image_width}x#{@image_height}") { |cols,
rows, image|
image.resize!(cols, rows)
}
img[0].write("#{@path}#{@filename}")

je te conseille également de regarder le plugin responds_to_parent
pour l’upload de fichier. Cela permet de faire de “l’upload a la
Google”. C’est à dire de passer par une frame et de ne pas changer de
page lors de l’upload du fichier (comportement que l’on recherche dans
certains cas)

Aurélien


#4

Voilà un petit exemple que j’ai codé (redimensionne une image si elle
est plus grande que la largeur ou/et hauteur maximale spécifiée):

img = Magick::Image.read("#{@path}#{@filename}")
img[0].change_geometry!("#{@image_width}x#{@image_height}") { |cols,
rows, image|
image.resize!(cols, rows)
}
img[0].write("#{@path}#{@filename}")

Aurélien

Merci de votre aide.

Je pensais bien, à Rmagick, l’ensemble des références me seront bien utile.

Par contre savez-vous quel est la commande qui donne la dimension de
l’image.

Parce que si je comprend bien le code ci-dessus, cela met à une dimension
définie, mais cela ne respecte pas les proportions, ce qui risque de
déformer l’image.

est-ce que img[0].widht me donneras une taille ?

Merci de votre aide.


#5

Super, merci pour toutes les infos.

Je pense que je vais pouvoir atteindre mon objectif.

En tous cas je suis impressionné par RMagick et tout ce dont il est
capable de faire.

Encore merci.


#6

Le code que je t’ai donné redimensionne bien l’image en respectant les
dimensions.
En fait c’est change_geometry qui s’en charge, il faut voir les deux
arguments qui lui sont passés comme
des contraintes de taille.
Plus d’info ici:
http://www.simplesystems.org/RMagick/doc/image1.html#change_geometry

Pour connaître la taille de l’image il faut plutot analyser ce que
contiens
img[2] je pense
http://www.simplesystems.org/RMagick/doc/image1.html#readpour plus
d’info.


#7

Grrrrrr j’ai vraiment un peu de mal.

Bon voila.

je veux modifier une image qu’un utilisateur upload sur mon serveur,
dont je ne connais pas la taille, mais cette image ne peut être
supérieur à 100x100 pixels.

donc le principe est simple, si un utilisateur upload une image qui fais
200x800 par exemple je dois faire

if width > 100

diviseur = widht /100 #ce qui donne 2

hauteur = widht / diviseur
largeur = height /diviseur

img[0].change_geometry!("#{hauteur}x#{largeur}") { |cols,rows, image|
image.resize!(cols, rows)
}
end

ce qui donneras un image de 100X400

puis je recommence

if height > 100

mon problème est que je ne sais pas récupérer la valeur de widht et de
height de l’image envoyer par l’utilisateur.

J’utilise Rmagick.

Merci de votre aide

MaitrePylos


#8

Pour obtenir les dimensions de l’image de base, tu as columns pour la
largeur, et rows pour la hauteur (en pixels tout ça)…

http://www.simplesystems.org/RMagick/doc/imageattrs.html#rows
http://www.simplesystems.org/RMagick/doc/imageattrs.html#columns

Certes, les noms ne sont pas forcément bien choisis, mais c’est censé
marcher :wink:


#9

Merci :slight_smile: