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

kit*_*ark 10 binary upload jquery post

我有截图作为二进制字符串.我想使用$ .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');
});
Run Code Online (Sandbox Code Playgroud)

如何将参数指定为附件?

scu*_*ube 6

使用 data

例:

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

请参阅:http://api.jquery.com/jQuery.post/


Dam*_*zyk 5

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

如果我正确阅读了您的问题,那么您正在将HTML“屏幕截图”保存到canvas元素。如果是这样,则toDataURL应该使用toBlob而不是阅读。这将为您提供可以使用FormData发送的二进制数据

var form = new FormData();

form.append('image', blob, 'image.jpg');
Run Code Online (Sandbox Code Playgroud)

以上可以使用常规发送XMLHttpRequest

var request = new XMLHttpRequest();

request.open('POST', 'http://foo.com/submitform.php');
request.send(form);
Run Code Online (Sandbox Code Playgroud)

工作示例-> Codepen

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

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

------WebKitFormBoundaryGWsPW93HnMPQFcXB--
Run Code Online (Sandbox Code Playgroud)

您也可以使用jQuery发送上述表单:

$.ajax({
    url: 'http://foo.com/submitform.php',
    type: 'POST',
    data: form,
    processData: false,
    contentType: false
});
Run Code Online (Sandbox Code Playgroud)

更新资料

刚刚看到了有关在PHP的服务器端处理文件上传的通知。上传的文件位于$ _FILES数组中:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)


Ari*_*iel 2

您需要做一些事情。

首先,您需要分解 filedataUrl。您只需要 Base64 数据,而不需要其余数据。然后使用客户端Javascript中的Base64编码和解码中的方法将字符串进行base64解码为保存二进制数据的变量。

然后将该变量包含在您的发布请求中。