#reactjs #ruby-on-rails #cloudinary
Вопрос:
Я пытаюсь загрузить изображение на CDN с помощью rails и реагировать .
Сначала я отправляю данные с интерфейса react через formdata. с функцией отправки, подобной этой
const handleSubmit = async (event) => {
event.preventDefault()
setLoading(true)
const formData = new FormData();
formData.append('blog[title]',title)
formData.append('blog[body]',body)
formData.append('blog[image]',bannerImage)
try{
const response = await axios.post("/blogs",formData)
setLoading(false)
console.log("blog submit response", response)
setBlogPosted(response.data.blog)
history.push(`/blogs/${response.data.blog.id}/preview`)
setLoading(false)
} catch(error){
console.log("blog not saved error",error)
}
}
на серверную часть рельсов
и метод создания для того же в контроллере
def create
@blog = Blog.new(blog_params.merge(user_id: @current_user.id))
upload_image = Cloudinary::Uploader.upload(params[:image])
@blog.update(image: upload_image['url'])
if authorized?
if @blog.save
render status: :ok,
json: {blog: @blog , notice: "Blog Successfully created"}
else
errors = @blog.errors.full_messages.to_sentence
render status: :unprocessable_entity, json: {error:errors}
end
end
end
и консоль показывает параметры, которые передаются как
Started POST "/blogs" for ::1 at 2021-09-24 19:46:01 0530
Processing by BlogsController#create as JSON
Parameters: {"blog"=>{"title"=>"<p>vjbklm;</p>", "body"=>"<p>nkml,</p>", "image"=>#<ActionDispatch::Http::UploadedFile:0x000000000eca9d98 @tempfile=#<Tempfile:C:/Users/user/AppData/Local/Temp/RackMultipart20210924-8588-1fxz7dp.png>, @original_filename="logo.png", @content_type="image/png", @headers="Content-Disposition: form-data; name="blog[image]"; filename="logo.png"rnContent-Type: image/pngrn">}}
но получаю ошибку
Completed 500 Internal Server Error in 667ms (ActiveRecord: 102.3ms | Allocations: 18933) TypeError (no implicit conversion of nil into String):
я не могу понять, передаются ли параметры изображения со значением, указанным выше в параметрах, тогда почему upload_image = Cloudinary::Uploader.upload(params[:image])
получается нулевое значение.
или что я делаю не так , любая помощь будет очень полезна.
Комментарии:
1. Поскольку данные параметров находятся в блоге [«изображение»], разве параметры не должны быть парами[:блог][:изображение] или чем-то другим в этих строках? Когда вы выводите параметры перед строкой upload_image = Cloudinary::Uploader.upload(параметры[:изображение]), что вы получаете?
2. Большое спасибо, ваши комментарии помогли мне решить мою проблему
3. Рад, что помог!