【发布时间】:2015-03-26 12:24:37
【问题描述】:
使用 SharePoint 2013 REST API,我成功地将文件(例如 .docx 或 .png)上传到使用 Dropzone.js 的文档库内的文件夹中。我有一个函数来初始化我的 dropzone,如下所示:
myDropzone = new Dropzone("#dropzone");
myDropzone.on("complete", function (file) {
myDropzone.removeFile(file);
});
myDropzone.options.autoProcessQueue = false;
myDropzone.on("addedfile", function (file) {
$('.dz-message').hide();
myDropzone.options.url = String.format(
"{0}/{1}/_api/web/getfolderbyserverrelativeurl('{2}')/files" +
"/add(overwrite=true, url='{3}')",
_spPageContextInfo.siteAbsoluteUrl, _spPageContextInfo.webServerRelativeUrl, folder.d.ServerRelativeUrl, file.name);
});
myDropzone.options.previewTemplate = $('#preview-template').html();
myDropzone.on('sending', function (file, xhr, fd) {
xhr.setRequestHeader('X-RequestDigest', $('#__REQUESTDIGEST').val());
});
我遇到的问题是,上传完成后,几乎所有文件(PDF 是唯一的不是)都显示为损坏的文件。这很可能是因为 SharePoint 要求上传的文件作为 ArrayBuffer 发送。 MSDN Source
使用常规的 Ajax POST 和上述方法将文件转换为数组缓冲区,我已成功将内容上传到 SharePoint 文档库,而没有损坏。现在,我想做同样的事情,但不必省略 Dropzone.js 的使用,它为功能界面添加了非常好的触感。
我已经研究过修改dropzone.js 中的uploadFiles() 方法,但这似乎很激烈。我还试图弄清楚我是否可以在options 中使用accept 选项,但这似乎是一个死胡同。
与解决方案最相似的两个问题是下面链接的问题,第一个似乎适用于我的情况,但同时看起来不像我想要使用的那样“干净”。
第二个是上传Base64编码的图片。
1 - Simulating XHR to get ArrayBuffer
2 - Upload image as Base64 with Dropzone.js
所以我的问题是,当一个文件被添加时,我如何拦截它,将数据转换为一个数组缓冲区,然后使用 Dropzone.js 发布它?
【问题讨论】:
-
我遇到了类似的问题...你能告诉我你最后做了什么吗..?
标签: rest sharepoint binaryfiles dropzone.js