可以't使用Formidable和Request向端点POST
Can't POST to Endpoint using Formidable and Request
我正试图使用Node将一个简单的文件上传到REST端点,但我一直遇到以下错误:
TypeError:无法读取空的属性"hasOwnProperty"
我的表格如下:
<form action="/upload4" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" value="Upload" />
</form>
我在Node/Express中的代码如下:
app.post('/upload4', function (req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var options = {
contentType: files.myfile.type,
metadata: { fileName: files.myfile.name }
};
request.post({ url: 'http://myendpoint.net/uploadPDF', formData: form }, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
console.log(req);
});
我在俯瞰什么。有没有更好的方法可以通过Node将文件上传到端点?
我已经解决了这个问题。在将数据传递给节点以解码为文件之前,我需要在客户端对数据进行base64编码。我需要使用XMLHTTPRequest来正确地获取二进制数据,因为jQueryAJAX似乎在返回方面存在问题(请参阅此处:http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/)。
这是我的前端:
var form = document.forms.namedItem("fileinfo");
form.addEventListener('submit', function (ev) {
var oData = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.responseType = "arraybuffer";
xhr.open("POST", "http://vendorapi.net/Upload", true);
xhr.onload = function (oEvent) {
if (xhr.status == 200) {
var blob = new Blob([xhr.response], { type: "image/png" });
//var objectUrl = URL.createObjectURL(blob);
//window.open(objectUrl);
console.log(blob);
var blobToBase64 = function(blob, cb) {
var reader = new FileReader();
reader.onload = function() {
var dataUrl = reader.result;
var base64 = dataUrl.split(',')[1];
cb(base64);
};
reader.readAsDataURL(blob);
};
blobToBase64(blob, function(base64){ // encode
var update = {'blob': base64};
var containerName = boxContainerName;
var filename = 'Texture_0.png';
$http.post('/postAdvancedTest', { containerName: containerName, filename: filename, file: base64}).success(function (data) {
//console.log(data);
console.log("success!");
// Clear previous 3D render
$('#webGL-container').empty();
// Generated new 3D render
$scope.generate3D();
}, function (err) {
//console.log(err);
});
})
} else {
oOutput.innerHTML = "Error " + xhr.status + " occurred when trying to upload your file.<br '/>";
}
};
xhr.send(oData);
ev.preventDefault();
}, false);
节点后端:
app.post('/postAdvancedTest', function (req, res) {
var containerName = req.body.containerName
var filename = req.body.filename;
var file = req.body.file;
var buf = new Buffer(file, 'base64'); // decode
var tmpBasePath = 'upload/'; //this folder is to save files download from vendor URL, and should be created in the root directory previously.
var tmpFolder = tmpBasePath + containerName + '/';
// Create unique temp directory to store files
mkdirp(tmpFolder, function (err) {
if (err) console.error(err)
else console.log('Directory Created')
});
// This is the location of download files, e.g. 'upload/Texture_0.png'
var tmpFileSavedLocation = tmpFolder + filename;
fs.writeFile(tmpFileSavedLocation, buf, function (err) {
if (err) {
console.log("err", err);
} else {
//return res.json({ 'status': 'success' });
blobSvc.createBlockBlobFromLocalFile(containerName, filename, tmpFileSavedLocation, function (error, result, response) {
if (!error) {
console.log("Uploaded" + result);
res.send(containerName);
}
else {
console.log(error);
}
});
}
})
})
相关文章:
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- https.request ignoring rejectUnauthorized
- Javascript ajax request
- node js post request.body undefined
- 使用Snap.SVG设置关于端点的SVG行的动画
- 带有Request.Form的JScript数组
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 在多行图表中,在每一行的末尾,我想要一个小圆圈和使用d3.js的端点值
- 如何使用asp.net在客户端点击时调用java脚本
- 在http服务单元测试中使用request-js时,chai.request不是一个函数
- 正在发送请求中包含数组的qx.io.request.Xhr请求
- CORS不适用于Uber API OAuth端点
- Angular2的谷歌云端点
- Angular Cross Origin Request CORS失败,但节点http.get()成功返回
- curl post request jquery equivalent
- dojo/request PUT方法dosn'不起作用
- PHP无法检索request.send
- 如何在 jquery post request 中发送api_key和api_secret参数
- 可以't使用Formidable和Request向端点POST
- 使用gapi.client.request来使用云端点