Sails.js 如何使用ajax将字符串/图像base64发送给Sailsjs-Skipper
目前,我正在捕获相机的图像,这种Base64格式,并通过ajax发送Sails.js 如何使用ajax将字符串/图像base64发送给Sailsjs-Skipper,sails.js,skipper,Sails.js,Skipper,目前,我正在捕获相机的图像,这种Base64格式,并通过ajax发送 xhr({ uri: 'http://localhost:1337/file/upload', method: 'post', body:'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...' } 0个文件已成功上载 这里有一个很好的链接,可以指导您将图像从Ajax客户端发送到Ajax服务器 您可以阅读此sails文档以在sails服务器上接收文件: 您可
xhr({
uri: 'http://localhost:1337/file/upload',
method: 'post',
body:'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...'
}
0个文件已成功上载 这里有一个很好的链接,可以指导您将图像从Ajax客户端发送到Ajax服务器 您可以阅读此sails文档以在sails服务器上接收文件: 您可以按照以下示例进行操作:
Client side ( ajax ):
var files = [];
$("input[type=file]").change(function(event) {
$.each(event.target.files, function(index, file) {
var reader = new FileReader();
reader.onload = function(event) {
object = {};
object.filename = file.name;
object.data = event.target.result;
files.push(object);
};
reader.readAsDataURL(file);
});
});
$("form").submit(function(form) {
$.each(files, function(index, file) {
$.ajax({url: "/ajax-upload",
type: 'POST',
data: {filename: file.filename, data: file.data}, // file.data is your base 64
success: function(data, status, xhr) {}
});
});
files = [];
form.preventDefault();
});
服务器端(sails):
[假设你有一张模型照片,上面有一个ID和一个URL]
[这是一个Picture controller的示例,只是给您一个想法]
module.exports = {
uploadPicture: function(req, res) {
req.file('picture').upload({
// don't allow the total upload size to exceed ~10MB
maxBytes: 10000000
},
function onDone(err, uploadedFiles) {
if (err) {
return res.negotiate(err);
}
// If no files were uploaded, respond with an error.
if (uploadedFiles.length === 0){
return res.badRequest('No file was uploaded');
}
// Save the "fd" and the url where the avatar for a user can be accessed
Picture
.update(777, { // give real ID
// Generate a unique URL where the avatar can be downloaded.
pictureURL: require('util').format('%s/user/pictures/%s', sails.getBaseUrl(), 777), // GIVE REAL ID
// Grab the first file and use it's `fd` (file descriptor)
pictureFD: uploadedFiles[0].fd
})
.exec(function (err){
if (err) return res.negotiate(err);
return res.ok();
});
});
}
};
希望这对你的研究有所帮助。
我还建议您首先使用Postman测试API,然后编写客户端代码。您需要进一步阐述您的问题。你想问什么还不完全清楚。看,你有解决这个问题的办法吗?实际上,我也遇到了同样的问题。所以Base64上传的服务器端代码与多部分文件上传的服务器端代码相同?如果您指的是多部分文件上传来发送文件块,比如说,因为它是一个像zip一样太大的文件,那么您必须在服务器端进行一些更改。现在有了这段代码,服务器希望立即得到完整的文件。在您的情况下,您必须将其保存在数组或其他变量中,然后重新组装它。您还需要检查是否收到了正确数量的数据,以确保您的文件没有损坏。如果问题更多:我能在base64中发送文件块吗?答案是肯定的。最初的提问者要求为Sails上传base64。您回答了“req.file('picture').upload()”——我将该函数用于多部分文件上传(html格式,带有一个表单和一个提交按钮)。在您的回答中,我没有看到将Base64字符串重新转换为JPG文件的函数。这就是为什么我要问。谢谢