S3に画像をアップロードするとアップロードが完了しません

jason328

S3に画像をアップロードしていますが、ファイル転送を完了できません。アプリの動作は次のとおりです。

  1. 開始する uploadToS3()
  2. ファイルはサーバーへのバイト送信の転送を開始します。
  3. 約600,000バイトが送信されると、アップロードは停止します。
  4. 20〜40秒後、アプリはアップロードの進行状況を0%で続行します。そもそもファイル転送が開始されていないかのように機能します。
  5. この間、ロガーにエラーは表示されません。

私のViewControllerには、ファイルをアップロードする次のメソッドがあります。

func uploadToS3(){

    // get the image from a UIImageView that is displaying the selected Image
    var img: UIImage = imageView.image!

    // create a local image that we can use to upload to s3
    var path: NSString = NSTemporaryDirectory().stringByAppendingPathComponent("image.png")
    var imageData: NSData = UIImagePNGRepresentation(img)
    imageData.writeToFile(path as String, atomically: true)

    // once the image is saved we can use the path to create a local fileurl
    var url:NSURL = NSURL(fileURLWithPath: path as String)!

    // next we set up the S3 upload request manager
    let uploadRequest = AWSS3TransferManagerUploadRequest()
    // set the bucket
    uploadRequest?.bucket = "test-bucket"
    // I want this image to be public to anyone to view it so I'm setting it to Public Read
    uploadRequest?.ACL = AWSS3ObjectCannedACL.PublicRead
    // set the image's name that will be used on the s3 server. I am also creating a folder to place the image in
    uploadRequest?.key = "foldername/image.png"
    // set the content type
    uploadRequest?.contentType = "image/png"
    // and finally set the body to the local file path
    uploadRequest?.body = url;

    // we will track progress through an AWSNetworkingUploadProgressBlock
    uploadRequest?.uploadProgress = {[unowned self](bytesSent:Int64, totalBytesSent:Int64, totalBytesExpectedToSend:Int64) in

        dispatch_sync(dispatch_get_main_queue(), { () -> Void in
            println("total  bytes sent")
            println(totalBytesSent)

            println("total  bytes expected to send")
            println(totalBytesExpectedToSend)
        })
    }

    // now the upload request is set up we can creat the transfermanger, the credentials are already set up in the app delegate
    var transferManager:AWSS3TransferManager = AWSS3TransferManager.defaultS3TransferManager()
    // start the upload
    transferManager.upload(uploadRequest).continueWithExecutor(BFExecutor.mainThreadExecutor(), withBlock:{ [unowned self]
        task -> AnyObject in

        // once the uploadmanager finishes check if there were any errors
        if(task.error != nil){
            println("%@", task.error);
        }else{ // if there aren't any then the image is uploaded!
            // this is the url of the image we just uploaded
            println("https://s3.amazonaws.com/s3-demo-swift/foldername/image.png");
        }

        //self.removeLoadingView()
        println("all done");
        return ""
        })
}

このアプリを再現したい人のために

Podfileに追加します。

pod 'AWSCore'
pod 'AWSS3'
pod 'AWSiOSSDKv2'
pod 'AWSCognitoSync'

次に、以下を含むブリッジヘッダーを追加します。

#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>

私の中AppDelegateには:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {        
    // Override point for customization after application launch.
    AWSCognitoCredentialsProvider.initialize()

    var credentialsProvider = AWSCognitoCredentialsProvider(
        regionType: AWSRegionType.USEast1,
        identityPoolId: "identity pool id"
    )

    var configuration = AWSServiceConfiguration(
        region: AWSRegionType.USEast1,
        credentialsProvider: credentialsProvider
    )

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

    return true
}

最後に、を含むView ControllerにuploadToS3()、を追加しimport AWSS3ます。

更新

これがログに記録されたエラーの最後のセクションです。

}]
2015-05-09 19:24:24.540 CoolApp[4492:55681] AWSiOSSDKv2 [Verbose] AWSURLResponseSerialization.m line:278 | -[AWSXMLResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body: [<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>A03D405FC272808A</RequestId><HostId>bhSw+xQkGrMVd9QWMKMG1qYezPJet8b5L2ZIoGXePoftuupMP3HdgbAgCpStiLefo5yA3m1OJvY=</HostId></Error>]
(%@, Error Domain=com.amazonaws.AWSS3ErrorDomain Code=1 "The operation couldn’t be completed. (com.amazonaws.AWSS3ErrorDomain error 1.)" UserInfo=0x7c17cdc0 {HostId=bhSw+xQkGrMVd9QWMKMG1qYezPJet8b5L2ZIoGXePoftuupMP3HdgbAgCpStiLefo5yA3m1OJvY=, Code=AccessDenied, Message=Access Denied, RequestId=A03D405FC272808A})
all done

私の質問は、これを修正して画像を正常にアップロードするにはどうすればよいですか。

Yosuke Matsuda

エラーメッセージに示されているように、Amazon CognitoIdentityプールでパーミッションが正しく設定されていません。Amazon Cognito認証ブログシリーズ(パート2パート3)とAmazon Cognito開発者ガイドを理解することは、CognitoIdentityを理解して設定するための優れたリソースです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

画像をs3に正常にアップロードしてから表示することができません

Nodeを使用してS3に画像をアップロードする方法

ローカル画像をアプリにドラッグすると、QGraphicsViewのドラッグアンドドロップが機能しません

アップロードした画像をDjangoでS3に保存する

PreSignedUrlを使用してS3に直接アップロードすると、FineUploaderonProgressが正しく起動しません

ノードjsからs3に画像をアップロードする

MongoDBStitchを使用してS3にアップロードされた画像を開くことができません

ファイルはローカルでS3にアップロードできますが、コンテナー内にアップロードできません(クレデンシャルを見つけることができません)

ペーパークリップでHerokuを介してS3に画像をアップロードする

python boto3、ファイルをs3にアップロードするとFalseが返されますが、例外はありません

Axios:s3へのアップロードは、アップロードが完了する前に解決されます

react / axiosとgolang / ginを介してS3に画像をアップロードする方法

AWSAppsyncを使用してイメージをs3にアップロードするプロセス|| Appsyncを使用したiOS画像のアップロード

CodeBuildはビルドアーティファクトをS3にアップロードしません

文字列をgzipNodejsとしてs3にアップロードする方法

AWS S3 Glacierアップロード-アーカイブの実行が完了するまでに長い時間がかかる-ステータスを確認したり、アップロードを高速化する方法は?

アップロードが完了した場合にのみs3ファイルをダウンロードします

画像を処理する前にアップロードが完了していることを確認する方法

NestJS-aws s3に画像をアップロードする方法は?

私のウェブサイトからS3に直接画像をアップロードできません

AWS S3にアップロードするときに、クローズドストリームにアクセスできません

DjangoImageFieldが画像をアップロードしていません

Api Gateway、Lambda関数を使用してS3バケットに画像をアップロードします

複数の画像をアップロードし、完了するまで待ってからAndroidとFirebaseに戻る

Laravel 画像を Amazon s3 にアップロード

VBScript を使用して画像ファイルを s3 バケットに直接アップロードする

PHPのmd5でS3アップロードが成功することを確認します

s3にアップロードする前に画像をダウンロードする必要がありますか?

PHP curlを介して画像を受信し、S3にアップロードします

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ