我尝试通过移动JavaScript应用程序中的ajax向文档服务器执行包含图片的POST请求。
我的ajax调用所需的cmis数据如下所示:
$results = $children.filter(selector);
我尝试上传的图片显示为var cmisInfo = {
'objectId': parentFolder,
'cmisaction': 'createDocument',
'propertyId[0]': 'cmis:name',
'propertyValue[0]': filename,
'propertyId[1]': 'cmis:objectTypeId',
'propertyValue[1]': 'cmis:document'
};
$.ajax(rootFolder, {
type: 'POST',
data: cmisInfo,
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', csrfToken);
xhr.setRequestHeader('Authorization', "Basic dXNlcjpwdw==");
}
}).done(function(response) {
console.log("New File ID: " + response.properties["cmis:objectId"].value);
}).fail(function(jqXHR) {
console.log(jqXHR.responseJSON.message);
});
字符串,使用BASE64
获取。让我们假设它保存在以下变量中:
FileReader
我现在的问题是,在我的请求中将var pictureBase64; // containing picture from filesystem in BASE64
作为内容放在何处?我想这样的对象通常会在ajax调用中的pictureBase64
属性中发送,但在我的情况下,data属性已经用于所需的cmis信息。我该怎么发送?
任何帮助或提示都将不胜感激!
答案 0 :(得分:0)
要将图片从文件系统上传到文档服务器,我必须在FormData
调用中将数据作为ajax
发送,并附加如下图像数据:
formData = new FormData;
formData.append('objectid', parentFolder);
formData.append('cmisaction', 'createDocument');
formData.append('propertyId[0]', 'cmis:name');
formData.append('propertyValue[0]', filename);
formData.append('propertyId[1]', 'cmis:objectTypeId');
formData.append('propertyValue[1]', 'cmis:document');
formData.append('_charset_', 'UTF-8');
formData.append('media', newBlob);
newBlob
从原始pictureBase64
转换而来,包含图像数据作为base64字符串:
cleanBase64 = pictureBase64.match(/,(.*)$/)[1];
binaryImage = atob(cleanBase64);
arrayBuffer = new ArrayBuffer(binaryImage.length);
uintArray = new Uint8Array(arrayBuffer);
i = 0;
while (i < binaryImage.length) {
uintArray[i] = binaryImage.charCodeAt(i);
i++;
}
blob = new Blob([uintArray], {
type: "image/jpeg"
});
newBlob = blob.slice(0, blob.size, "image/jpeg");
最后processData: false
和contentType: false
必须添加到ajax
调用才能生效。