私はhapijsバージョン17.0.1を使用しています。私はhapijsルート上でajaxリクエストを使って画像をアップロードしようとしています。ここでは、プロファイルの写真をアップロードするために私のAJAXコードは次のとおりです。hapijsでプロフィールをアップロード17.0
var image_file_input = document.getElementById("user_profile_upload");
image_file_input.onchange = function() {
if(this.files != undefined)
{
if(this.files[0] != undefined)
{
var formData = tests.formdata ? new FormData() : null;
if (tests.formdata)
{
//alert(file)
formData.append('image_file', this.files[0]);
formData.append('userId', user_id);
formData.append('memberId', member_id);
}
$.ajax({
url: "/v1/User/uploadUserPic",
data: formData,
type: "POST",
dataType: "json",
contentType: false,
processData: false,
contentType: "multipart/form-data",
success: function(data){
console.log(data);
var errMsg = null;
var resData = null;
if(data.statusCode == 200)
{
resData = data.result;
}
else
{
alert(data.message)
}
},
error: function(error){
alert(error);
}
});
}
}
}
そして、ここでは私のHapijsルートコードは次のとおりです。
var uploadUserPic = {
method: 'POST',
path: '/v1/Module/uploadUserPic',
config: {
description: 'Update Image For User',
tags: ['api', 'User'],
auth: 'session',
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
validate: {
payload: {
userId : Joi.string().regex(/^[a-f\d]{24}$/i).required(),
memberId: Joi.string().required(),
image_file: Joi.object().required(),
},
failAction: FailCallBack
}
},
handler: function (request, reply) {
var resultData = null;
var error = null;
return new Promise(function (resolve) {
var multiparty = require('multiparty');
var fs = require('fs');
var form = new multiparty.Form();
form.parse(request.payload, function (err, fields, files) {
if(err)
{
error = err;
resolve();
}
else
{
var mkdirp = require('mkdirp');
var img_dir = "./files/users/";
mkdirp(img_dir, function (err) {
if (err)
{
error = err;
console.error(err);
resolve();
}
else
{
var oldpath = files.image_file.path;
var newpath = "./files/users/"+requestPayload.userId+".png";
fs.rename(oldpath, newpath, function (err) {
if(err)
{
error = err;
}
resolve();
});
}
});
}
});
}).then(function (err, result) {
if(err) return sendError(err);
if(error) return sendError(error)
return {
"statusCode": 200,
"success": true
};
});
}
}
上記のコードは、行form.parse(request.payload, function (err, fields, files) {});
上のエラーcannot read property 'content-length' of undefined
次は私を与える私を聞かせてください。私が何か間違っているかどうかを知る。私がphpで書いたanohterのURLでajaxリクエストのurlを置き換えると、それは完全に動作します。これは私のhapijs/nodejsコードで何かが間違っていることを意味します。
'sendError'はエラーをフォーマットしています。第二に私は '応答'の代わりに 'h'を知っています。私はhapi 14から17にアップグレードしたので、プロジェクト全体を変更する必要がありました。また、「h」は私にはやや厄介なように聞こえる。だから私は 'reply'を変数表記とみなし、' reply'変数で 'h'のプロパティ/関数を呼び出しました。ところで助けてくれてありがとう。私はあなたの解決策をチェックし、あなたに連絡します。 –
それは魅力的な仲間のように働いた。ご協力いただきありがとうございます。あなたの答えを受け入れるのはうれしいです。 –
全く問題ありません。喜んで:D –