2017-01-19 12 views
0

私はapiを使ってamazon s3 bucket_typeサーバーに顧客の署名イメージを投稿したいと思います...私は別のチュートリアルを参照しています...私はチュートリアルから十分な情報を得ていませんでした...私は次のコードで試しています私は結果が得られません...swift3のamazonバケットに画像をアップロードするには?

funcUpload(service:String,imagedata:Data,completion:@escaping (_ result:NSDictionary?,_ error:AnyObject?) ->()){   
let boundaryConstant = "----------V2y2HFg03eptjbaKO0j1" 
    let urlpath:String = "http:myurl" + service   
    let url:NSURL = NSURL(string:urlpath)! 
    let request = NSMutableURLRequest(url: url as URL) 
    request.httpMethod = "P0ST" 
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData 

    request.httpShouldHandleCookies = false 
    let contentType = "multipart/form-data; boundary=\(boundaryConstant)"   
    request.setValue(contentType, forHTTPHeaderField: "Content-Type" 
    let body = NSMutableData() 
    if imagedata != nil{ 
     body.append("--\(boundaryConstant)\r\n".data(using: String.Encoding.utf8)!)   
     body.append("Content-Disposition: form-data; name=\"\("universalapparealproduct")\" ; filename=\"image.jpg\"\r\n".data(using: String.Encoding.utf8)!) 
     body.append("Content-Type: \("universalapparealproduct")\r\n\r\n".data(using: String.Encoding.utf8)!) 
     body.append(imagedata) 
     body.append("\r\n".data(using: String.Encoding.utf8)!)   
     } 
     body.append("--\(boundaryConstant)--\r\n".data(using:  String.Encoding.utf8)!) 
     request.httpBody = body as Data  
     let config = URLSessionConfiguration.ephemeral 
     self.session = URLSession(configuration: config) 
     let task = session.dataTask(with: request as URLRequest) {  (data, response, error) -> Void in 
     if let receivedData = data 
     {      
     do 
     {let resultDic = try JSONSerialization.jsonObject(with: receivedData, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary 
      completion(resultDic!,nil) 
     } 
     catch let error 
     { 
      NSLog("\(error)") 
     } 
    } 
    else if let errorMessage = error 
    { 
     completion(nil,errorMessage as AnyObject?) 
    } 
      self.session.invalidateAndCancel() 
    }   
    task.resume() 
    } 
} 

私はこの問題を解決するために手伝ってください。 ありがとうございます。

答えて

0
  1. let urlpath:String = "http:myurl" + serviceはタイプミスのようです。
  2. サービス変数に、アップロードできる事前に署名された資格情報を持つURLが含まれているとします。それが正しいことを確認してください。そうでなければ、サーバーに資格情報を事前に署名しておく必要があります。
  3. 使用PUTないPOST
  4. 私は、要求の本体だけで画像データになりますが、あなたは体に多くのものを追加しているように見えることを期待します。アップロードするファイルの種類はわかりませんが、奇妙なファイルを作成しています。それがあなたの意図である場合は問題ありませんが、ただ私たちはそれがあなたがしていることを認識しています。カスタムファイルタイプをアップロードするためにインデントする場合は、そのコードをすべて別の関数に移動し、データをアップロードするだけの別の関数を使用します。
  5. 設定する必要があるHTTPHeaderフィールドはContent-Lengthです。送信するボディのサイズに設定する必要があります。
  6. 要求の期待される結果は、長さが0でエラーなしのデータです。したがって、JSONSerializationは応答ブロックで間違っています。
+0

hi..my url私のアプリケーションURLをファイル/ upoadとして使用していて、バックエンドで "POST"メソッドのみを使用しています –

+0

リクエストの本文が選択され、bucket_type = "my project type"要求された本体にこのbucket_typeをどこに設定する必要があるのか​​分かりません。 –

+0

S3に画像をアップロードする一般的な方法は、バックエンドサーバーから事前設定されたURLを取得することです。このURLにはすでにバケットとファイル名、アップロードする必要があるすべての権限が含まれています。このURLを使用すると、http://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.htmlを参照して、バックエンドを通過することなくs3に直接アップロードできます。それがあなたが使用しているものなら、あなたは私が与えた指示に従うべきです。サーバーにイメージをアップロードして、それをs3にアップロードすると、そのサーバーが受け取る予定のものがわからないため、私はあなたを助けることができません。 –

関連する問題