Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sails.js 如何使用ajax将字符串/图像base64发送给Sailsjs-Skipper_Sails.js_Skipper - Fatal编程技术网

Sails.js 如何使用ajax将字符串/图像base64发送给Sailsjs-Skipper

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服务器上接收文件: 您可

目前,我正在捕获相机的图像,这种Base64格式,并通过ajax发送

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文件的函数。这就是为什么我要问。谢谢