前提・実現したいこと
iOSとrubyを使ってローカルに画像、動画を保存するアプリを作成しています。
rubyはrailsのActiveStorageを使用しています。
iOS側から写真フォルダから写真を選択してAlamofireを使い送信するところまでは、実装できています。
問題はActiveStorageにて保存先をデフォルトのローカルにしているのですが、うまく保存できません。
userモデルを作成して、テスト段階なので、カラムはnameのみのテーブルを作成しました。
iOS側では送信できていると思うのですが、railsでのControllerの実装でなにか足りていないと思うのですが、解決できません。
本来ならrailsのプロジェクトのルートのstorageに画像が保存されると思うのですが。
iOSの方は少し経験があるのですが、rubyはほぼ初心者です。
宜しくおねがいします。
発生している問題・エラーメッセージ(エラーが出てないのが、問題。。。)
Processing by PostTestController#profile as */* Parameters: {"image"=>#<ActionDispatch::Http::UploadedFile:0x00007fe7adba1818 @tempfile=#<Tempfile:/var/folders/9l/gxc7k9f15mdcdzy0nz0y7fcr0000gn/T/RackMultipart20190623-58881-1dq0ws6.jpg>, @original_filename="image.jpg", @content_type="image/jpg", @headers="Content-Type: image/jpg\r\nContent-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r\n">, "uuid"=>"0987654321"} (0.2ms) BEGIN ↳ app/controllers/post_test_controller.rb:9 User Create (0.7ms) INSERT INTO `users` (`name`, `created_at`, `updated_at`) VALUES ('0987654321', '2019-06-23 02:32:25', '2019-06-23 02:32:25') ↳ app/controllers/post_test_controller.rb:9 (9.5ms) COMMIT ↳ app/controllers/post_test_controller.rb:9 Completed 200 OK in 46ms (Views: 0.5ms | ActiveRecord: 34.3ms)
該当のソースコード
ruby
1class User < ApplicationRecord 2 has_one_attached :image # 追記 3end
ruby
1class PostTestController < ApplicationController 2 protect_from_forgery except: :profile 3 4 def profile 5 6 pram01 = params[:uuid] 7 8 User.create('name' => pram01) 9 10 #送信結果 0→成功 1→失敗 11 render json: {result: 0} 12 end 13end
Swift
1 /// 画像のアップロード 2 /// TODO: タイトルと詳細をpramとして渡す 3 /// - Returns: <#return value description#> 4 func imageUpload(url: String, image: UIImage, completionHandler: @escaping (Result<T>) -> () = {_ in}) { 5 6 let uuid = "0987654321" 7 8 guard let imageData = image.jpegData(compressionQuality: 1) else { 9 return 10 } 11 12 Alamofire.upload(multipartFormData: { (multipartFormData) in 13 multipartFormData.append(imageData, withName: "image", fileName: "image.jpg", mimeType: "image/jpg") 14 multipartFormData.append(uuid.data(using: .utf8)!, withName: "uuid") 15 16 }, to: url) { (encodingResult) in 17 switch encodingResult { 18 case .success(let upload, _ ,_): 19 upload.uploadProgress(closure: { (progress) in 20 //進捗率の取得 21 print("Upload Progress: (progress.fractionCompleted)") 22 }) 23 24 //以下省略します
試したこと
WEBでの写真保存などは参考にできる記事があると思うのですが、APIとしての受け取り方が見つけれません。
補足情報(FW/ツールのバージョンなど)
Swift 5.0
Rails 5.2.3
railsはAPIモードで作成していません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/01 07:11