rails、socket.io、およびノードを使用してチャットサーバーを構築しました。これにより、ユーザーは互いにAmazon S3を利用しようとしています。ここでは、クライアントとサーバーから該当するコードスニペットは、次のとおりです。ストリームを使用しているときにS3がファイルをアップロードしました
クライアント:
var img_file = this.files[0]; //retrieved from file input
file_reader.onload = function(e) {
//console.log(img_file);
var extension = img_file.name.split('.');
extension = extension[extension.length-1];
get_user_id(username, function(to_id) {
socket.emit('message', {
from: "<%= @user.displayname %>",
fromid: <%= @user.id %>,
to: username,
toid: parseInt(to_id),
content: e.target.result,
type: 'image',
extension: extension,
size: img_file.size
});
})
};
file_reader.readAsBinaryString(img_file);
サーバー:私はこのコードを使用して画像をアップロードしようとするたびに
socket.on('message', function(message) {
console.log(message.type + " message received, sending to appropriate person: " + message.to);
if (message.type == 'text') {
//send message like normal
sendMessage(message);
}
else {
//it's an image, need additional processing
var blank_file = uuid.v4() + '-' + new Date().getTime() + '.' + message.extension;
var contents = message.content;
s3.putObject({
Bucket: 'bucket-name', //not the real bucket name
Key: blank_file,
ContentType: 'image/' + message.extension,
//ContentLength: message.size,
Body: contents
},
function(err, data) {
if (err) {
console.log(err)
}
else {
console.log('file uploaded to s3 successfully');
message.content = getS3Url(blank_file);
sendMessage(message);
}
})
}
}
、動作するように表示され、私のs3バケツを確認してイメージを開くと、私のオペレーティングシステムはファイルが読めないか壊れていると言っています。私はContentLengthパラメータを使用しようとしましたが、私が "BadDigest:指定したContent-MD5が受信したものと一致しませんでした"というエラーが表示されます。
誰でもお手伝いできますか?私はこのコードを s3なしで正常に動作させるようにしていますが、何らかの理由で私が使用を開始して以来、壊れているファイルや認識できないファイルが継続しています。