如何在jquery post函数中指定二进制数据

如何在jquery post函数中指定二进制数据,jquery,post,upload,binary,Jquery,Post,Upload,Binary,我的截图是二进制字符串。 我想使用$.post()函数将一些数据发布到服务器 我的代码: var filename = "screenshot.jpg": var filedataUrl = "";// string like 'data:image/jpeg;base64,/9j/4A .....' $.post(serverUrl, { title: title name: name /*here must be my file */ }, function(response) {

我的截图是二进制字符串。 我想使用$.post()函数将一些数据发布到服务器

我的代码:

var filename = "screenshot.jpg":
var filedataUrl = "";// string like 'data:image/jpeg;base64,/9j/4A .....'

$.post(serverUrl, {
title: title
name: name

/*here must be my file */

}, function(response) {
                alert('ok');
});

如何将参数指定为附件?

您需要做一些事情

首先,需要分解filedataUrl。您只需要base64数据,而不需要其余数据。然后使用base64中的方法将字符串解码为包含二进制数据的变量


然后在post请求中包含该变量。

我认为您不能使用文件名上载图像。您可能需要创建一个带有文件输入元素的表单,用户可以在其中选择文件(而不是通过javascript)

然后使用AJAX提交表单。

使用
数据

例如:

$.post({
  url: serverUrl,
  data: {
    'fileasstring': filedataUrl
  },
  success: function(response) {
    alert('ok');
  }
});

请参阅:

从技术上讲,base64是二进制数据的文本表示形式-如果您对此没意见,以上答案是正确的。如果你想发送真正的二进制数据,你必须使用

如果我正确地阅读了您的问题,那么您正在将html“屏幕截图”保存到canvas元素。如果是这样的话,您应该使用。这将为您提供二进制数据,我们可以使用

可以使用常规
XMLHttpRequest
发送上述内容:

var request = new XMLHttpRequest();

request.open('POST', 'http://foo.com/submitform.php');
request.send(form);
工作示例->

如果您查看chrome inspector,您将看到创建了正确的多部分请求:

------WebKitFormBoundaryGWsPW93HnMPQFcXB
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg

------WebKitFormBoundaryGWsPW93HnMPQFcXB--
您也可以使用jQuery发送上述表格:

$.ajax({
    url: 'http://foo.com/submitform.php',
    type: 'POST',
    data: form,
    processData: false,
    contentType: false
});
更新

刚才看到了关于用PHP在服务器端处理文件上传的通知。上载的文件在$\u文件数组中可用:

<?php
    $uploaddir = '/var/www/uploads/';
    $uploadfile = $uploaddir . basename($_FILES['image']['name']);
    if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
        echo "File was successfully uploaded.\n";
    } else {
        echo "Error";
    }
    echo 'File info:';
    print_r($_FILES);
?>

base64
编码图像也是一个普通字符串。您可以将其作为
数据
传递给jquerypost

它将如下所示

var filename = "screenshot.jpg":
var filedataUrl = "";// string like 'data:image/jpeg;base64,/9j/4A .....'

$.post(serverUrl, {
  title: title,
  name: name,
  image: filedataUrl,
})
.done(function(res){
  alert('ok')
})

我还没有想象。这是浏览器截图。我只需要将其作为文件传递。在这种情况下,最好的选择是将该文件转换为base64并通过ajax发布@Ariel的答案对你来说是合适的。你可能会对这篇文章的答案感兴趣
var filename = "screenshot.jpg":
var filedataUrl = "";// string like 'data:image/jpeg;base64,/9j/4A .....'

$.post(serverUrl, {
  title: title,
  name: name,
  image: filedataUrl,
})
.done(function(res){
  alert('ok')
})