1

我有一个移动网站,允许用户上传他们在设备上拍摄的图像以及他们输入的一些文本。目前它将图像编码为base64,但不幸的是它膨胀了大约30%。multipart/form-data我想通过 POST实现方法来优化这个特性。

以下是我如何实现它。在服务器端,我有一个正在测试的 php 脚本。它将二进制数据保存到文件中,但它只捕获 9 个字节,因为服务器认为数据是text/plain类型,因此只捕获前 9 个可打印字符。在这种情况下,我正在使用 PNG 文件进行测试,这就是我得到的。

PNG上传的文件是十六进制的。 仅捕获 9 个字节

有人看到这里有什么不寻常的地方要添加或删除吗?它快把我逼疯了。

        var boundary = 'boundary' + Math.floor(Math.random() * (new Date().getMilliseconds()) );

        var data = "--" + boundary + '\r\n';
            data+= "content-disposition: form-data; name=\"txt\"" + '\r\n';
            data+= "content-type: text/plain" + '\r\n\r\n';
            data+= "Text+data\r\n" + '--' + boundary + '\r\n' ;
            data+= "content-disposition: form-data; name=\"img\"" + '\r\n';
            data+= "content-length: " + (image_length) + '\r\n';
            data+= "content-type: application/octet-stream" + '\r\n\r\n';
        var body_length = image_length + ('\r\n--' + boundary).length + data.length;
            data+= binary_data + '\r\n--' + boundary;

        $.ajax({ type : 'POST', url : 'post.test.php?len=' + image_length,
            data : data, contentType: 'multipart/form-data, boundary=' + boundary, contentLength: body_length
        });
4

0 回答 0