Cloud Modules Guideに従って、Parse Cloud Code で画像のサイズを変更しようとしています。
基本的な考え方は次のとおりです。ユーザーに対して afterSave が呼び出されたときに、小さいプロファイルの pic が null であり、標準のプロファイル pic が null でないかどうかを確認します。true の場合、Parse から標準のプロファイル写真を取得し、バッファに読み込み、ファイルを作成し、ファイルを保存してから、ファイルを User に追加して保存します。残念ながら、ファイルは正しく保存されていないようです。
クラウド afterSave 関数は次のとおりです。
Parse.Cloud.afterSave(Parse.User, function(request) {
...
Parse.Cloud.httpRequest({
url: request.object.get("profilePicture").url(),
success: function(response) {
// The file contents are in response.buffer.
var image = new Image();
console.log("Buffer: " + response.buffer );
console.log("Length " + response.buffer.length);
image.setData(response.buffer);
var imgData = image.data();
// Save the image into a new file.
var base64 = imgData.toString("base64");
var scaled = new Parse.File("thumbnail.png", { base64: base64 });
scaled.save().then(function() {
request.object.set("profilePictureSmall", scaled);
request.object.save();
}, function(error) {
console.log( "The file either could not be read, or could not be saved to Parse.");
});
}
});
...
});
User オブジェクトは正常に保存されているようですが、保存された画像ファイルは壊れた画像です。
奇妙なことはconsole.log("Length " + response.buffer.length);
、適切なサイズをコンソールに出力することです。
console.log("Buffer: " + response.buffer );
出力を与えます:�PNG
ここで何が起こっているのか分かりますか?