Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как организовать загрузку файла от юзера? 
:(
    Опции темы
Wowa
Дата 10.3.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Как организовать загрузку файла от юзера?
Например, картинку на сервер. С использованием RoR.

Добавлено @ 20:58 
Вот, нашел кое-что: http://sean.treadway.info/demo/upload/
PM WWW   Вверх
rubyclub
Дата 23.3.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.2.2007
Где: Odessa/Ukraine

Репутация: нет
Всего: 2



Так ты интересуешься лии расказываешь как это сделать ...???
PM MAIL WWW ICQ   Вверх
Wowa
Дата 23.3.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(rubyclub @  23.3.2007,  09:06 Найти цитируемый пост)
Так ты интересуешься лии расказываешь как это сделать ...??? 

и то, и другое.
PM WWW   Вверх
nwlad
Дата 23.3.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2007

Репутация: нет
Всего: нет



Вот на английском:

1. In a Terminal or command prompt window, type the following command:
ruby script/generate migration AddPhotoColumn

2. Open the newly created 003_add_photo_column.rb file that was added under
/db/migrate and modify it to look like the following:

class AddPhotoColumn < ActiveRecord::Migration
   def self.up
      add_column :classifieds, :content_type, :string
      :default => "image/png"
      execute 'ALTER TABLE classifieds ADD COLUMN picture LONGBLOB'
   end

def self.down
      remove_column :classifieds, :content_type
      remove_column :classifieds, :picture
end
end


All you do in this file is to tell Rails to add two new columns to the classifieds table
called picture and content_type. You are setting the picture column’s type to be
LONGBLOB, which is a MySQL-specific column type for storing large amounts of noncharacter
data such as images. LONGBLOB is not a default migration type for Rails
(there is a migration database called :binary for the BLOB datatype), hence having to
use some actual SQL commands to add the second column. Since there is a chance
that an image might be more than 65KB, using LONGBLOB is a better solution.
The content_type field stores the data type of the uploaded image, which gives the
browser a hint of what type of file you are trying to work with so it knows how to
render it.

3. Save the changes to your migration file and then run rake migrate in the Terminal
or command prompt window. Your new column should now be created.
Let’s continue with the quest of enabling a seller to upload an image when creating
a new classified. The first thing you should do is update your new classified view.

4. Open up the new.rhtml file in app/views/classified and add the
following code before the submit_tag line:

<p><label for="classified_picture">Picture</label><br />
<%= file_field 'classified', 'pictureimg' %></p>
This snippet of code introduces the file_field helper. The helper
works just like a text_field helper, but instead returns an input tag
of the “file” type instead of “text”.


5. Next, modify your start_form_tag to have the :multipart parameter set to true
by changing the start_form_tag line to the following:

<%= start_form_tag ({:action => 'create'}, :multipart => true) %>
By setting the multipart parameter, you ensure that your action properly passes
along the binary data from the file field to the database.

6. Next, open up the classified.rb in the app/models file and the following methods
to it just above the protected keyword:

def pictureimg=(picture_field)
return if picture_field.blank?
self.content_type = picture_field.content_type.chomp
self.picture = picture_field.read
end
Save your changes. The purpose of the pictureimg accessor method is to take the
data from the file_field helper in our view and then associate the uploaded
image’s content type with our content_type field and the image itself with our
picture field.



< просьба всем: давая ответы будте конкретны, пишите по существу. >

Это сообщение отредактировал(а) nwlad - 23.3.2007, 14:04
PM MAIL   Вверх
MeFistofeL
Дата 28.3.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.6.2006

Репутация: нет
Всего: нет



Во вьюшке добавляеш
Код

<form action="upload" method="post" enctype="multipart/form-data">
<%= file_field(:file_to_upload, :same_file) %>
</form>


В контроллере
Код

def upload
   f = params[:file_to_upload][:same_file]
   path = "/путь/куда/аплоадьть/файл/"
   f_name = "имя_файла"
   File.open(path+f_name, "wb"){ |f| f.write(f.read) }
end

И всё в принципе  smile
PM MAIL   Вверх
rubyclub
Дата 9.5.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.2.2007
Где: Odessa/Ukraine

Репутация: нет
Всего: 2



Вот написал тоже статью по этому поводу.
В двух словах скажу что не обойтись таким примером как привели выше, естьеще одна особенность когда размер файла больше 10 кб тогда он  храниться в временном файле, иначе он в буфере.
Код

   1. if @up_file.instance_of?(Tempfile)  
   2.   FileUtils.cp(@up_file.local_path, @local_file_name)  
   3. else  
   4.   File.open(@local_file_name, "wb") { |f| f.write(@up_file.read) }  
   5. end  



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

http://rubyclub.com.ua/messages/show/62

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  upload.rb 3,07 Kb
PM MAIL WWW ICQ   Вверх
MPie
Дата 16.5.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.5.2007

Репутация: нет
Всего: 1



Копайте в сторону плагина acts_as_attachment.
IMHO, решает большинство проблем, связанных с загрузкой файла. Только с Аяксом не дружит...
PM MAIL ICQ   Вверх
wladk
Дата 17.5.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.4.2007

Репутация: нет
Всего: нет



Что-то я торможу:(

Есть поле на шаблоне

Код

<p><label for="image_image">Image</label><br/>
<%= file_field ('image', 'image', :class => 'textinput') %>


Есть код в контроллере

Код

def create
    @image = Image.new(params[:image])
    @image.image = params[:image][:image].read
    @image.content_type = params[:image][:image].content_type.chomp
...........


Мелкие файлы грузяться,  109к грузится на половину. 
Пытался реализовать различные ветки в зависимости от способа хранения, но чувствую себя индусом - копировать получается понимать нет:(

Код

  def create
    @image = Image.new(params[:image])
    @tmp_file = params[:image][:image]
    
    if @up_file
    @image.image = @tmp_file.read
    end
    
    if @up_file.instance_of?(Tempfile)
      FileUtils.cp(@up_file.local_path, @image.image)  
    else  
      @image.image = @up_file.read 
    end 
    
    @image.content_type = params[:image][:image].content_type.chomp
..............


Напишите кусок кода, как оно должно быть, потому как мысль стоит как вкопанная:(

Спасибо!
PM MAIL   Вверх
wladk
Дата 23.5.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.4.2007

Репутация: нет
Всего: нет



Ну вообщем нашел проблемму. Была она в старой версии MySQL, 3,21 что ли.... Поле я создал как :binary и в него влазило 64к. Остальное совершенно молча обрезалось. После обновления субд моментально вывалилась ощибка про то что данных слишком много для данного поле. Поменял тип поля и все заработало.
Если это кому-то интересно....
PM MAIL   Вверх
andron
Дата 29.8.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



У меня появилась проблемка связанная с загрузкой файлов.
Пользуюсь NetBeans оттуда загружаю webrick, большие файлы не хочет загружать в БД ни в какую. 
Выскакивает ошибка: 
Код

Not Found
`/directors/create' not found. 
WEBrick/1.3.1 (Ruby/1.8.5/2007-08-20) at localhost:3000 

или такая
Код

Mysql::Error: Lost connection to MySQL server during query


В MySQL с типами данных все в порядке.

Но когда загрузил webrick через консоль cmd все заробатало все загружается.
Это хорошо когда все работает, но хочется вызывать webrick через NetBeans, что удобнее.
Помогите разобраться
PM MAIL   Вверх
kronos_vano
Дата 6.9.2007, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



>if @up_file.instance_of?(Tempfile)  
не правильно! В монгреле файлы до 9-10 килобайт имеют тип StringIO.
Я сделал аплоад файлов через аякс, с проверкой размера и прогресс баром под монгрел (юзал монгрел аплоад прогресс гем). Если кому интересно могу рассказать что и как smile
PM MAIL   Вверх
andron
Дата 12.9.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Проблема загрузки файла в БД при рыботе с Safari
прописывает ошибку:
#<ArgumentError: nagative length -42 given>

В чем причина?
В других браузерах работает все нормально

все нашел
проблема с Safari, не понимает по-русски

Это сообщение отредактировал(а) andron - 12.9.2007, 16:44
PM MAIL   Вверх
OmeZ
Дата 4.11.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Цитата(kronos_vano @  6.9.2007,  01:36 Найти цитируемый пост)
сли кому интересно могу рассказать что и как smile

расскажи
PM MAIL   Вверх
G61
Дата 4.11.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.11.2007

Репутация: нет
Всего: нет



Цитата(kronos_vano @  6.9.2007,  01:36 Найти цитируемый пост)
 Если кому интересно могу рассказать что и как

Цитата(OmeZ @  4.11.2007,  08:31 Найти цитируемый пост)
расскажи

Присоединяюсь. Очень нужная штука.
PM MAIL   Вверх
OmeZ
Дата 5.11.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Народ, я нашел проблему обрезки файла! Есть в стандартной дукументации, цитирую
Код

truncated files?
If you have trouble with zero-length files written by this code, try calling

person['picture'].rewind

before writing the file.


Это сообщение отредактировал(а) OmeZ - 5.11.2007, 10:00
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.1635 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.