Привет, всем. Проблема такая не могу понять как лучше подцепить несколько файлов/картинок .
Имеем, back-end = RubyOnRails (gem Carrierwave), front-end = angularJs.
Создал директиву в ангулар, с помощью которой отправляю посредством json данные на сервак.
app.directive 'uploadImage', ->
return{
restrict: 'A'
link:(scope,elem)->
reader = new FileReader()
reader.onload =(e)->
scope.iFile = btoa(e.target.result)
scope.$apply()
elem.on 'change', ->
scope.iFile=''
file = elem[0].files[0]
scope.iFilesize = file.size
scope.iFiletype = file.type
scope.iFilename = file.name
scope.$apply()
reader.readAsBinaryString(file)
}
При оформлении заказа можно приложить фото/изображение, изображение сначала кодируется с помощью base64, присоединяется к остальной data и отправляется на сервак, там декодируется и присоединяется опять в требуемом для carrierwave виде.
Action Create in TasksController:
def create
params[:task][:pict] = parse_image_data(params[:iFile]) if params[:iFile]
@task = Task.new(task_params)
if @task.save
clean_tempfile
render_with_protection @task.to_json, {status: :created, location: @task }
else
render_with_protection @task.errors.to_json, {status: :unprocessable_entity }
end
end
private
def parse_image_data(image_data)
Rails.logger.info 'decoding now'
decoded_data = Base64.decode64(image_data) # json parameter set in directive scope
# create 'file' understandable by Carrierwave
@data = StringIO.new(decoded_data)
@tempfile = Tempfile.new('task-image')
@tempfile.binmode
@tempfile.write decoded_data
@tempfile.rewind
ActionDispatch::Http::UploadedFile.new(
:tempfile => @tempfile,
:content_type => params[:itype],
:filename => params[:iname]
)
end
Я хотел бы иметь возможность вкладывать несколько изображений, кто-либо знает как это сделать?