Моя компания начала использовать Microsoft Office 365. Они используют OneDrive для сохранения и просмотра файлов.
Мне было поручено создать веб-сайт, который позволит клиентам загружать файлы прямо в OneDrive. Моя команда создала нашу собственную фиктивную учетную запись OneDrive для проверки сохранения файлов, которые будут загружены клиентом.
Начиная с простого ввода HTML-формы:
<form id = "uploadfile">
<input type = "file" id = "pdfFile" name = "pdfFile" class = "form-control" />
<button type = "button" class = "btn btn-primary" id = "uploadBtn">Upload File</button>
</form>
А теперь jQuery:
$('#uploadBtn').on('click', function(e)
{
e.preventDefault();
var formData = new FormData($('#uploadfile')[0]); // <-- not currently using this variable, but I know I will need it
var filename = $('#pdfFile').val().replace(/.*(/|\\)/, '');
var odOptions =
{
clientId: "00000000-xxxxx-0000-xxxx-0000000000",
action: "upload", // <-- was originally set to save
sourceInputElementId: "pdfFile",
sourceUri: "",
fileName: filename,
openInNewWindow: true,
advanced: {endpointHint: "api.onedrive.com"},
success: function(files) { /* success handler */ },
progress: function(p) { /* progress handler */ },
cancel: function() { /* cancel handler */ },
error: function(e) { /* error handler */ }
}
OneDrive.save(odOptions);
});
Все вышеперечисленное взято по следующей ссылке:
https://docs.microsoft.com/en-us/onedrive/developer/controls/file-pickers/js-v72/save-file
Я добился некоторого прогресса с тех пор, как спросил об этом. Я могу добраться до того места, где открывается окно OneDrive, и вижу различные папки. Но, похоже, мне нет файла для сохранения.
Начиная здесь:
Пользователь выбрал изображение. После нажатия кнопки загрузки открывается OneDrive:
Но когда я нахожусь в окне OneDrive, после нажатия кнопки «Сохранить» файл не сохраняется.
Что мне не хватает, чтобы сохранить файл в OneDrive?
Я могу видеть имя файла, если это то, о чем вы спрашиваете.
Вероятно, вы не добавили его в свой код, потому что в руководстве, которое вы сами упомянули, говорится, что это необходимо, поэтому это должно быть очевидно, но, тем не менее, вы спрашиваете, импортируете ли вы сценарий OneDrive так, как он упоминается в руководстве?
Или, может быть, это может быть связано с размером вашего файла. Поскольку вы явно не определяете ограничение размера в своем скрипте, это может быть причиной того, что это не сработает. Или где-то повторяется "#pdfFile".
Я обновил код.
(У этого вопроса есть связанный и возможный дубликат вопрос сестры, который читатели могут пожелать прочитать, прежде чем ответить на него).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Наконец-то мне удалось сохранить в OneDrive. Некоторые изменения были внесены на портал регистрации приложений (где вы получаете свой appID). Я добавил разрешения, чтобы обеспечить возможность чтения и записи в папку в OneDrive.
Я также внес изменения в часть кода odOptions:
$('#uploadBtn').on('click', function(e)
{
e.preventDefault();
//var formData = new FormData($('#uploadfile')[0]);
//var filename = $('#pdfFile').val().replace(/.*(/|\\)/, '');
var odOptions =
{
clientId: "00000000-xxxxx-0000-xxxx-0000000000",
action: "save", // upload was not valid
sourceInputElementId: "pdfFile",
//sourceUri: "",
//fileName: filename,
openInNewWindow: true,
advanced: {endpointHint: "api.onedrive.com"},
success: function(files) { /* success handler */ },
progress: function(p) { /* progress handler */ },
cancel: function() { /* cancel handler */ },
error: function(e) { /* error handler */ }
}
OneDrive.save(odOptions);
});
Следуя приведенной здесь документации, я решил мою проблему:
https://docs.microsoft.com/en-us/onedrive/developer/controls/file-pickers/js-v72/save-file
Вы проверили, работает ли ваше регулярное выражение так, как вы ожидали?