s3にビデオをアップロードし、事前に署名されたPUT URLを取得しようとしています。これを行うためのコードは次のとおりです。SignatureDoesNotMatchエラーがIonic 2を使用して事前に署名されたURLを使用してアップロードされました
import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import {MediaCapture} from 'ionic-native';
import {Http} from '@angular/http';
import { Transfer } from 'ionic-native';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
public base64Image: string;
constructor(private navController: NavController, public http: Http) {
this.base64Image = "https://placehold.it/150x150";
}
public takeVideo() {
MediaCapture.captureVideo({limit:2}).then(function(videoData){
var link = "https://mysamplebucket.s3.amazonaws.com/non-tp/esx.mov?AWSAccessKeyId=TEMP_KEYY&Expires=1482290587&Signature=JUIHHI%2FcnLkqSVg%3D&x-amz-security-token=FQoDYXDGRfTXk6hma0Rxew6yraAX%2FlYGaQmYLwkvsuuB3%2F%2FtPvGDVs3dIQG0Ty3MeMjn0p%%26djt5xhAMk73pndJbZP0tCYYlvPvlUAyL8x7O%%2B3AwEa%%2B9b43yarIuPLCvujmKLTDyi%%3D%3Di";
var options: any;
options = {
fileKey: 'file',
fileName: 'esx.mov',
httpMethod: 'PUT',
chunkedMode: false,
mimeType: 'video/quicktime',
encodeURI: false,
headers: {
'Content-Type': 'video/quicktime'
}
};
var ft = new Transfer();
ft.upload(videoData[0].fullPath, link, options, false)
.then((result: any) => {
this.success(result);
}).catch((error: any) => {
this.failed(error);
});
}, function(err){
alert(err);
});
}
}
ここには、事前に署名されたPUT URLを生成するコードがあります。
var params = {Bucket: s3_bucket, Key: filename, Expires: 900000};
var url = {
'url' : s3.getSignedUrl('putObject', params)
};
私は、SignatureDoesNotMatch
エラーが発生します。メッセージには、The request signature we calculated does not match the signature you provided. Check your key and signing method.
と書かれています。私がここで間違っていることがわかりません - 私はいくつかの他のSOとIonicの質問を見て、何も役に立たないように勧めました。私が何をして間違っているかについてのアイデアは?
あなたは事前に署名したPUTのURLを「持っている」と言うが、あなたはしていないようですそれを生成するために使用しているコードを表示します。問題がどこにあるのかは確かです。このコードと、具体的には正規のリクエストを生成するために使用しているパラメータを表示しますか? (秘密鍵ではない、もちろん)。 content-typeは、含める必要のあるパラメータの1つです。 –
@ Michael-sqlbot私はそれを生成するサーバー側のコードを持っています。私はそれを得るために呼び出すAPIの終点があります。今、私はこのコードをテストしているので、Postmanを使ってapiエンドポイントを呼び出し、単に '' link''変数に入れてください。 – blehadfas1
これは問題の原因と思われます。署名コードが正しく動作すると仮定すると、問題はリンクを取得するために渡すパラメータにあるようです。これを診断するためには、より多くの情報が必要です。 –