미리 서명 된 URL을 사용하여 React Native에서 S3로 이미지를 업로드하는 데 아무런 노력이 없었습니다.React 미리 지정된 URL이있는 S3에 네이티브 업로드
노드에 미리 서명 된 URL을 생성합니다 : 여기
const s3 = new aws.S3();
const s3Params = {
Bucket: bucket,
Key: fileName,
Expires: 60,
ContentType: 'image/jpeg',
ACL: 'public-read'
};
return s3.getSignedUrl('putObject', s3Params);
가 S3에 RN 요청입니다 : 여기 내 코드입니다
var file = {
uri: game.pictureToSubmitUri,
type: 'image/jpeg',
name: 'image.jpg',
};
const xhr = new XMLHttpRequest();
var body = new FormData();
body.append('file', file);
xhr.open('PUT', signedRequest);
xhr.onreadystatechange =() => {
if(xhr.readyState === 4){
if(xhr.status === 200){
alert('Posted!');
}
else{
alert('Could not upload file.');
}
}
};
xhr.send(body);
game.pictureToSubmitUri = assets-library://asset/asset.JPG?id=A282A2C5-31C8-489F-9652-7D3BD5A1FAA4&ext=JPG
signedRequest = https://my-bucket.s3-us-west-1.amazonaws.com/8bd2d4b9-3206-4bff-944d-e06f872d8be3?AWSAccessKeyId=AKIAIOLHQY4GAXN26FOQ&Content-Type=image%2Fjpeg&Expires=1465671117&Signature=bkQIp5lgzuYrt2vyl7rqpCXPcps%3D&x-amz-acl=public-read
오류 메시지 :
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
내가 생성 된 URL을 사용하여 S3에 성공적으로 컬 이미지 수, 나는 성공적으로 RN (그러나 나는 단지 requestb.in에 원시 데이터를 그렇게하지 볼 수 있습니다에서 requestb.in을 게시 할 수있을 것 이미지가 제대로 표시되는지 100 % 확인하십시오.) 모든이를 바탕으로
는, 나는 내 이미지가 제대로 기간을 업로드하지 않거나 2) 어떻게 든 방법은 S3 내 요청이오고 그럼 어떻게 다른 원) 1까지 내 문제를 좁혀했습니다.
어떤 도움 muuuuuucchhhh 될 것이라고 감사!
이 성공적으로 몸이 단지 텍스트 ({ '데이터': '푸'}) 인 경우 S3하는 RN에서 게시 할 수 UPDATE. 아마 AWS는 mutliform 데이터를 좋아하지 않습니다. RN에서 파일로 보내려면 어떻게해야합니까 ???
서명이 유효하지 않은 이유를 잘 모릅니다. 나는 거의 동일한 서명 코드를 가지고 있으며 잘 작동합니다. 성공적으로 비어있는 업로드는 경로를 URI로 전달하기 때문에 발생합니다. 'file : /// var /.../ 4BBAE22E-DADC-4240-A266-8E469C0636B8.jpg'이 효과가 있습니다. –
AWS 비밀 키에 후행 전달 "/"이 있습니까? – error2007s
@DanielBasedow 서명이 유효하지 않다고 생각하지 않습니다. 이미지를 사용하여 이미지를 업로드 할 수 있습니다. 내 RN 요청이 어떻게 형성되는지에 문제가 있다고 생각합니까? – Cole