当通过ajax将大小超过2MB的文件上传到parse.com时,我收到500内部服务器错误。该应用程序托管在parse.com上,使用Cloud code和Express JS编写。过去的文件(图像+视频) 上传没有任何问题,但最近应用程序正在获得大文件500错误。小于1 MB的文件仍然可以成功上传。让我展示代码。
1。 Express JS控制器上传文件(服务器端)
注1:上传文件不会发送到网址 https://api.parse.com/1/files/filename ,而是发送到自定义网址 Express JS, https://example.com/file?name=filename
注2:文件数据发送到自定义Express JS网址和控制器方法"文件",如下所述,利用Cloud Code Buffer Module创建解析文件并发送回复客户端(浏览器)。
exports.file = function(req, res) {
var buf = new Buffer(req.body, 'base64');
var fileType = req.get("Content-Type");
var fileName = decodeURIComponent(common.trim(req.query.name));
var file = new Parse.File(fileName, {base64: buf.toString('base64')}, fileType);
file.save().then(function() {
res.json({url: file.url(), name: file.name()});
}, function(error) {
var message = "";
if(req.app.settings._gs.debug === true) {
message = error.code + ' - ' + error.message;
}
else {
message = 'Failed uploading file.';
}
res.json(message);
});
};
2。 Jquery ajax方法(客户端)
//file change handler
$('.upload').on('change', function(e) {
var files = e.target.files || e.dataTransfer.files;
uploadVideo(files[0]);
});
//Video upload handler
var uploadVideo = function(file) {
$.ajax({
async: false,
cache: false,
type: "POST",
dataType: 'json',
url: "https://example.com/file?name=fileNameWithExtension",
data: file, //file binary data
processData: false,
contentType: false,
beforeSend: function(jqXHR, settings) {
//set content type
jqXHR.setRequestHeader('Content-Type', file.type);
},
success: function(data, textStatus, jqXHR) {
//success callback
},
error: function(jqXHR, textStatus, exception) {
//error callback
}
});
}
代码工作正常,文件小于1 MB但大于1MB大小会导致500内部服务器错误。
我曾尝试调试问题,我发现了一个有趣的事情,即控件永远不会达到控制器方法,控制器不执行" exports.file = function(req,res){....}"但在某些时候打破并发送500错误。 parse.com日志中没有条目输入错误。我无法找到导致500代码的真正问题。好吗?
答案 0 :(得分:1)
发现问题所在。 Parse.com不允许超过1MB的帖子数据。