我试图在我的附件中输入我的数据。我正在使用NodeJS
这是我的代码:
var date = new Date();
var data = {
name : obj.name,
serving : obj.serving,
cuisine : obj.cuisine,
uploadDate : date,
ingredients : obj.ing,
directions: obj.direction
} //Assume that I read this from html form and it is OK
db.insert(data, function(err, body){
if(!err){
console.log(body);
var id = body.id
var rev = body.rev
var headers = {
'Content-Type': req.files.image.type
};
var dataString = '@' + req.files.image.path;
var options = {
url: 'https://username:password@username.bluemix.cloudant.com/db_name/' + id + '/' + req.files.image.name +'?' + 'rev=' + rev,
method: 'PUT',
headers : headers,
body : dataString
}
console.log(options)
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
}
});
我发送图像附件后得到201响应。但是在cloudant仪表板中,我看到上传图片的"length": 38
是不可能的。
如果我尝试访问上传的图片,则会显示:
{"错误":" not_found","原因":"文档缺少附件"}。
我如何解决这个问题?
答案 0 :(得分:2)
看起来您正在上传图片的路径,而不是图片本身的内容:
var dataString = '@' + req.files.image.path;
这只会上传字符串' @ xyz'其中xyz是文件的路径。您需要上传图像的内容。有关更多信息,请参阅以下内容:
https://wiki.apache.org/couchdb/HTTP_Document_API#Attachments
我不确定如何从req.files
获取上传文件的内容。我相信req.files
不再适用于Express 4,所以我使用multer:
https://github.com/expressjs/multer
这是我将文件上传到上传到我的应用的Cloudant的方式:
<强>客户端强>
<form action="/processform" method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit" value="Submit">
</form>
Node.js路由
var multer = require('multer');
...
var app = express();
...
var uploadStorage = multer.memoryStorage();
var upload = multer({storage: uploadStorage})
app.post('/processform', upload.single('myfile'), processForm);
注意:'myfile'
是表单中文件输入类型的名称。
Node.js上传到Cloudant
function processForm() {
// insert the document first...
var url = cloudantService.config.url;
url += "/mydatabase/" + doc.id;
url += "/" + encodeURIComponent(req.file.originalname);
url += "?rev=" + doc.rev;
var headers = {
'Content-Type': req.file.mimetype,
'Content-Length': req.file.size
};
var requestOptions = {
url: url,
headers: headers,
body: req.file.buffer
};
request.put(requestOptions, function(err, response, body) {
if (err) {
// handle error
}
else {
// success
}
});
...
}