当前位置: 首页 > 面试题库 >

如何通过.ajax以base64编码发布图像?

姬飞昂
2023-03-14
问题内容

我有一些JavaScript代码可将图像上传到服务器。下面是可以正常工作的ajax调用。

$.ajax({
    url: 'https://api.projectoxford.ai/vision/v1/analyses?',
    type: 'POST',
    contentType: 'application/json',
    data: '{ "Url": "http://images.takungpao.com/2012/1115/20121115073901672.jpg" }',
})

我现在需要将图像上传为base64编码,例如

data: 'data:image/jpeg;base64,/9j/4AAQSkZJRgA..........gAooooAKKKKACiiigD//Z'

但这是行不通的,即服务器无法识别我发送和抱怨的数据。

有谁知道在AJAX调用中发送base64编码数据的正确格式是什么?


问题答案:

感谢所有帮助我前进的答案。

我也已在 https://social.msdn.microsoft.com/Forums/en-
US/807ee18d-45e5-410b-a339-c8dcb3bfa25b/testing-project-oxford-ocr-how-to-
例如,在base64中使用一个本地文件?forum =
mlapi


(更多特定于牛津大学的项目),在他们的答案和您的答案之间,我有解决方案。

  1. 您需要发送一个Blob
  2. 您需要在.ajax调用中设置processData:falsecontentType: 'application/octet-stream'选项

所以我的解决方案看起来像这样

首先是制作斑点的功能(从比我更有天赋的人逐字复制)

makeblob = function (dataURL) {
            var BASE64_MARKER = ';base64,';
            if (dataURL.indexOf(BASE64_MARKER) == -1) {
                var parts = dataURL.split(',');
                var contentType = parts[0].split(':')[1];
                var raw = decodeURIComponent(parts[1]);
                return new Blob([raw], { type: contentType });
            }
            var parts = dataURL.split(BASE64_MARKER);
            var contentType = parts[0].split(':')[1];
            var raw = window.atob(parts[1]);
            var rawLength = raw.length;

            var uInt8Array = new Uint8Array(rawLength);

            for (var i = 0; i < rawLength; ++i) {
                uInt8Array[i] = raw.charCodeAt(i);
            }

            return new Blob([uInt8Array], { type: contentType });
        }

然后

$.ajax({
    url: 'https://api.projectoxford.ai/vision/v1/ocr?' + $.param(params),
    type: 'POST',
    processData: false,
    contentType: 'application/octet-stream',
    data: makeblob('data:image/jpeg;base64,9j/4AAQSkZJRgA..........gAooooAKKKKACiiigD//Z'
 })
.done(function(data) {alert("success");})
.fail(function() {alert("error");});


 类似资料:
  • 我需要用电子邮件和密码提出请求。电子邮件和密码是发送到我的存储库类的字符串。密码需要用Base64编码。 我正在使用改装2。 我知道我需要使用类,但是我怎么才能发出请求呢? 这是来自 Rest 接口的代码: 在存储库中,我用这个对密码进行编码: 但是我需要用email和encodedPassword变量初始化requestBody来发出请求。 这真的是正确的方法吗? requestBody属性是如

  • 我有一个来自服务器的bas64编码图像,我想通过JavaScript强制下载。有可能吗?

  • 问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear

  • 我正在使用Html5、Java脚本、ajax和Java。我正在上传一个图像从桌面到作物,作物后,它是显示在同一页的引导模式。但是我没有得到这个图像的URL,我得到了一些Base64代码,当我发送这个Base64代码时,它没有工作。 我看到了这篇文章,但我没有从这个链接中得到任何解决方案:https://stackoverflow.com/ 此代码为静态图像,首次显示. 我将result.ToDat

  • 问题内容: 我一直在使用Serialize()将复选框形式的数据与Post()传递给可以容纳多个相同类别项目的购物篮。 当我使用“提交”按钮发布它们时,它可以很好地工作,并且可以将多个值传递并显示在一个类别下。 但是,当我使用Jquery serialize()时,每个类别仅显示一个项目,而总共仅显示两个类别。这是一个阵列问题,但我无法解决。 我应该使用替代的JQuery函数来传递多维数组吗? 问

  • 问题内容: 我正在通过ajax将Image base64数据传递给我的php函数,但是对于大尺寸图像,Ajax不会发布数据。但是,相同的代码对于小图像非常适用。 数据太大,因此部分发布了, ajax PHP 当我尝试获取php中的发布数据时,我越来越空了。使用base64时,ajax不发送数据的原因可能是什么? 问题答案: 我同意TrueBlueAussie的观点。这看起来像PHP中的服务器端设置