2016-10-14 12 views
0

私はCloudyをReactネイティブアプリと統合しています。Cloudine APIを使用してアップロードするときに問題が発生しています。私はReact Native Image Pickerを使ってカメラのロールから画像を選択し、それを使って私は以下のソースuriを取得します。Cloudy APIへのアップロード - 無効なファイルパラメータ

私はCloudineからのエラー応答を返しています。私はそれが何を参照しているのか分かりません。 "Invalid file parameter. Make sure your file parameter does not include '[]'"

私はデバッガを使用すると、私は私の要求の本文に送信しているすべてのパラメータをログアウトすることができます。どんな提案も大歓迎です!

source.uri: /Users/IRL/Library/Developer/CoreSimulator/Devices/817C678B-7028-4C1C-95FF-E6445FDB2474/data/Containers/Data/Application/BF57AD7E-CA2A-460F-8BBD-2DA6846F5136/Documents/A2F21A21-D08C-4D60-B005-67E65A966E62.jpg

async postToCloudinary(source) { 
let timestamp = (Date.now()/1000 | 0).toString(); 
let api_key = ENV.cloudinary.api; 
let api_secret = ENV.cloudinary.api_secret 
let cloud = ENV.cloudinary.cloud_name; 
let hash_string = 'timestamp=' + timestamp + api_secret 
let signature = CryptoJS.SHA1(hash_string).toString(); 
let upload_url = 'https://api.cloudinary.com/v1_1/' + cloud + '/image/upload' 

try { 
    let response = await fetch(upload_url, { 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ 
     file: { 
     uri: source.uri, 
     type: 'image/jpeg' 
     }, 
     api_key: api_key, 
     timestamp: timestamp, 
     signature: signature 
    }) 
    }); 

    let res = await response.json(); 
    console.log(res); 
} catch(error) { 
    console.log("Error: ", error); 
} 

}

UPDATE だから私は今、base64エンコードの作業を持って、私は思いますが、私はまだ同じエラーを取得しています。

var wordArray = CryptoJS.enc.Utf8.parse(source.uri); 
var file = CryptoJS.enc.Base64.stringify(wordArray); 

try { 
    let response = await fetch(upload_url, { 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ 
     file: { 
     uri: file, 
     type: 'image/jpeg;base64' 
     }, 
     api_key: api_key, 
     timestamp: timestamp, 
     signature: signature 
    }) 
    }); 
+0

画像からbase64を取得してCloudnetに送信したことがありますか? –

+0

申し訳ありませんが、どういう意味か分かりません...どうすればいいですか?あなたはCryptoJSでbase64にイメージuriをエンコードし、その後Cloudineに送信する必要がありますか? –

+0

ええ、私は間違いなくドキュメントでそれを逃しました... source.uriは、base64エンコードされる必要があります。今、新しいエラーを取得すると、私のエンコードされたURLが好きではありません。 「サポートされていないソースURL」 –

答えて

0

したがって、渡していたソースデータが正しくフォーマットされていないことが判明しました。私はすでにフォーマットされたデータURIとしてImagePickerプラグインから渡すことができました(ImagePickerの例にはソースファイルをキャプチャする2つの方法があり、間違ったものを使用していました)。私はCryptoJSのものを取り除き、そのまま渡すことができましたfile: source.uri

関連する問題