大家好我正在使用XMLHttpRequest
的上传功能。它在Web浏览器上运行得很好,但是当我在移动设备上测试它时,它不再起作用了。这是在移动设备上选择照片后的错误日志:
E / chromium(2604):[错误:layer_tree_host_impl.cc(2121)]强制 缺少工作程序上下文时的零拷贝磁贴初始化
我已经添加了人行横道
这是我在客户端的代码:
if(fileInfo.size <= 20000000) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/uploadSomeWhere', true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
if (xhr.upload) {
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
display.innerText = Math.floor((e.loaded / e.total) * 100) + '%';
bootstrapPB.style.width = Math.floor((e.loaded / e.total) * 100) + '%';
}
}
xhr.upload.onloadstart = function() {
display.innerText = '0%';
bootstrapPB.style.width = '0%';
}
}
xhr.send(fileInfo);
} else {
LocalState.set("mainError", "Please upload a file not more than 20MB");
}
在我的服务器中:
WebApp.connectHandlers.use('/uploadSomeWhere',function(req,res){
function makeid()
{
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 10; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var uniquePhotoId = makeid();
var originalPhoto = "/"+uniquePhotoId+"_original/";
fs.mkdirSync("/home/dating/contents/"+originalPhoto);
var file2 = fs.createWriteStream("/home/dating/contents"+originalPhoto+uniquePhotoId);
file2.on('error',function(error){if(error){
throw new Meteor.Error("Filed to upload image");
}});
file2.on('finish',function(){
res.writeHead(200, {"content-type":"text/html"});
res.end();
});
req.pipe(file2);
// Set timeout to fully capture and convert the image
setTimeout(function(){
imageMagick(file2.path).autoOrient().setFormat("jpg").write(file2.path, function(){
req.pipe(file2);
});
}, 1000);
req._events.close;
});
请告知出了什么问题。非常感谢。顺便说一句,我正在使用ReactJS和Meteor创建一个混合移动应用程序。
我不确定xhr是不是发送数据还是服务器没有 接受来自xhr的发送数据
答案 0 :(得分:0)
似乎在reactjs中使用xhr确实存在问题,所以我做的事情就是使用FileReader将图像从文件输入转换为缓冲区base64,并从那里使用服务器中的FS节点将缓冲区base64转换为然后将图像上传到目录。
现在一切都很好:)