未向SAP Leonardo图像特征提取API发送文件,使用FormData

我正在测试SAP Leonardo图像特征提取API(https://sandbox.api.sap.com/ml/featureextraction/inference_sync)。我有图像的base64字符串,我想将其转换为文件对象并压缩,然后使用XMLHttpRequest将压缩后的图像文件发送到这个API。但响应文本是“服务需要一组(压缩的)图像”。

我附上了我的HTTP请求头和参数的截图如下。

我的HTTP请求头

尽管我们在参数中看到乱码,但压缩文件在这里下载已成功创建。

我的HTTP请求参数

如果您无法下载压缩文件,请参考下面的截图。

我的压缩文件

一切看起来都没问题。然而,响应文本如下,状态为400。

我的HTTP响应

我的JavaScript代码如下。哪里出了问题?这让我快疯了…

dataURItoBlob: function(dataURI, fileName) {	//将base64/URL编码的数据组件转换为字符串中保存的原始二进制数据	var byteString;	if (dataURI.split(',')[0].indexOf('base64') >= 0)		byteString = atob(dataURI.split(',')[1]);	else		byteString = unescape(dataURI.split(',')[1]);		//分离出mime组件	var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];		//将字符串的字节写入类型化数组	var ia = new Uint8Array(byteString.length);	for (var i = 0; i < byteString.length; i++) {		ia[i] = byteString.charCodeAt(i);	}		var blob = new Blob([ia], {encoding:"UTF-8",type:mimeString});	//Blob()几乎是File() - 它只是缺少下面两个属性,我们将添加这些属性	blob.lastModifiedDate = new Date();	blob.name = fileName + '.' + mimeString.split('/')[1];		return blob;},onSubmit: function(oEvent) {	var oImage = this.getView().byId('myImage');	//oImage.getSrc() : 'data:image/png;base64,iVBORw0KGgo...'	var imageFile = this.dataURItoBlob(oImage.getSrc(), 'myImage');	var zip = new JSZip();	zip.file(imageFile.name, imageFile);		zip.generateAsync({		type:"blob",		compression: 'DEFLATE', // 强制对这个文件进行压缩		compressionOptions: {			level: 6,	    },	}).then(function(content) {		//saveAs(content, "hello.zip");		// 启动忙碌指示器		var oBusyIndicator = new sap.m.BusyDialog();		oBusyIndicator.open();				var formData = new FormData();		formData.append('files', content, 'myImage.zip');				var xhr = new XMLHttpRequest();		xhr.withCredentials = false;				xhr.addEventListener("readystatechange", function () {			if (this.readyState === this.DONE) {				oBusyIndicator.close();				//navigator.notification.alert(this.responseText);				console.log(this.responseText);			}		});		//设置请求方法		//API沙箱的API端点		//在HCP中配置的Destionation '/SANDBOX_API'为'https://sandbox.api.sap.com'		var api = "/SANDBOX_API/ml/featureextraction/inference_sync";		xhr.open("POST", api);		//添加请求头		xhr.setRequestHeader("Content-Type", "multipart/form-data");		xhr.setRequestHeader("Accept", "application/json");		//API沙箱的API密钥		xhr.setRequestHeader("APIKey", "yQd5Oy785NkAIob6g1eNwctBg4m1LGQS");		//发送请求		xhr.send(formData);	});	},


回答:

我自己解决了这个问题。我分享我的解决方案只是为了其他人的参考。解决方法非常简单,只需在发送请求前删除下面的代码即可。我不知道为什么这样做。请如果您知道原因,提供建议。提前感谢!

xhr.setRequestHeader("Content-Type", "multipart/form-data");

此致,[隐藏人名]

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注