如何通过ajax和cmis将图片上传到文档服务器

时间:2015-04-23 18:45:29

标签: jquery ajax cmis

我尝试通过移动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信息。我该怎么发送?

任何帮助或提示都将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用herehere的帮助。

要将图片从文件系统上传到文档服务器,我必须在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: falsecontentType: false必须添加到ajax调用才能生效。