質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2115閲覧

formData で送信した画像が Null になってしまう。

kento720

総合スコア30

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/09/28 07:09

編集2021/09/28 07:53

Nuxtサーバーから Rubyサーバーに、画像を送信(imageカラムにput)しようとしています。

put 自体は成功するのですが、レスポンスを見ると、image オブジェクトが null になっています。Docker のログにも image = NULL と表示されてしまいます。

どこで間違いをしてしまっているのでしょうか…?

back | Started PUT "/api/v1/auth" for 172.18.0.1 at 2021-09-28 15:56:20 +0900 back | Processing by Api::V1::Auth::RegistrationsController#update as JSON back | Parameters: {"image"=>"/_nuxt/assets/images/img2222.jpg"} back | User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`uid` = 'test@gmail.com' LIMIT 1 back | TRANSACTION (0.5ms) BEGIN back | User Update (1.7ms) UPDATE `users` SET `users`.`image` = NULL, `users`.`updated_at` = '2021-09-28 06:56:20.943772' WHERE `users`.`id` = 1 back | TRANSACTION (8.0ms) COMMIT back | User Load (1.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 back | TRANSACTION (0.5ms) BEGIN

フロントエンド(ポート8080)

<template> <div> <img width="100" :src=icon /> <button @click="changeUserAvatar" type="submit">Submit</button> </div> </template> <script> export default { data() { return { icon: require('@/assets/images/img2222.jpg'), }; }, methods: { async changeUserAvatar() { const formData = new FormData(); formData.append('image', this.icon); await this.$axios .put('api/v1/auth', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }) .then((res) => { console.log(res); }) .catch((err) => { console.log(err); }); }, }, } </script>

バックエンド(ポート3000)

Gemfile

# image gem 'carrierwave' gem 'fog-aws' gem 'mini_magick'

/back/app/controllers/api/v1/auth/registrations_controller.rb

# class Api::V1::Auth::RegistrationsController < ApplicationController module Api module V1 module Auth class RegistrationsController < DeviseTokenAuth::RegistrationsController private def sign_up_params params.permit(:email, :password, :password_confirmation, :image) end def account_update_params params.permit(:first_name, :last_name, :email, :password, :image) end end end end end

/back/db/migrate/20210910042637_devise_token_auth_create_users.rb

Rails.application.routes.draw do devise_for :users namespace :api do namespace :v1, format: 'json' do mount_devise_token_auth_for 'User', at: 'auth', controllers: { registrations: 'api/v1/auth/registrations' } resources :users, only: %i[index show create update destroy] end end end

内容:gem 'devise' を使用。エンドポイントは api/v1/auth。


back/config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| if Rails.env.production? config.cache_storage = :fog config.fog_directory = 's3-bucket-for-images' config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'ap-northeast-1' } else config.asset_host = 'http://localhost:3000' config.cache_storage = :file end end

内容:config.asset_host = 'http://localhost:3000' を指定


/back/config/environments/development.rb

<snip/> config.action_controller.asset_host = 'http://localhost:3000' <snip/>

/back/app/uploaders/image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base if Rails.env.development? storage :file elsif Rails.env.test? storage :file else storage :fog end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def default_url(*_args) end def extension_allowlist %w[jpg jpeg gif png] end def filename original_filename end end

/back/db/migrate/20210910042637_devise_token_auth_create_users.rb

<snip/> ## User Info t.string :first_name t.string :last_name t.string :image t.string :email <snip/>

内容:imageカラムを追加

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/09/28 07:25

サーバサイドのコードはどのようなものでしょうか?
kento720

2021/09/28 07:54

maisumakun 様 コメントをくださりありがとうございます。 Ruby サーバの情報を付加いたしました。
kento720

2021/10/14 11:50

自己解決しました。Nuxt 側で input する際に、model に画像データをバインドさせていないことが原因でした。
guest

回答1

0

自己解決

自己解決しました。Nuxt 側で input する際に、model に画像データをバインドさせていないことが原因でした。

投稿2021/10/14 11:52

kento720

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問