#javascript #reactjs #file #sharepoint #microsoft-teams
#javascript #reactjs #файл #sharepoint #microsoft-команды
Вопрос:
Я новичок в использовании ReactJS, мне нужна помощь сообщества для решения моей проблемы.
Заявление о проблеме: — Я хочу загрузить файл изображения в Sharepoint с помощью ReactJS, и в качестве ответа я хочу вернуть URL-адрес Sharepoint для изображения, чтобы я мог сохранить в базе данных для отображения этих изображений на страницах моего приложения. Я разрабатываю веб-приложение, и это приложение работает на вкладке teams as.
Вот одна ссылка, которую я пробовал, но я не могу успешно реализовать.
После реализации этого я получаю следующую ошибку:-
Ошибка типа: не удается прочитать свойство ‘getFolderByServerRelativeUrl’ с неопределенными настройками.uploadFileFromControl src/components/Settings.jsx:656
653 | //var files = this._input.files;
654 | //var file = files[0];
655 | //Upload a file to the SharePoint Library`enter code here`
> 656 | sp.web.getFolderByServerRelativeUrl(this.props.context.pageContext.web.serverRelativeUrl)
| ^ 657 | //sp.web.getFolderByServerRelativeUrl(this.props.context.pageContext.web.serverRelativeUrl "/MyDocs")
658 | .files.add(file.name, file, true)
659 | .then((data) =>{
Просмотр скомпилированного
FileReader.reader.onloadend
src/components/Settings.jsx:603
600 |
601 | //console.log('fileVar[i].name ' reader.fileName);
602 |
> 603 | this.uploadFileFromControl(fileVar[i]);
| ^ 604 |
605 | logoImages.push({image: reader.result, name: reader.fileName});
606 | this.setState({eventLogoImageUrl: JSON.stringify(logoImages)});
Я не понимаю, будет ли этот sp.web работать в приложении teams или нет?
Пожалуйста, помогите, заранее спасибо.
Ответ №1:
В основном вы получаете сообщение об ошибке, потому что ваш getFolderByServerRelativeUrl не получает никакого значения или не определен
Вам нужно использовать функцию, подобную этой, и вызвать эту функцию при нажатии кнопки
private uploadFileFromControl() {
//Get the file from File DOM
var files = this._input.files;
var file = files[0];
//Upload a file to the SharePoint Library
var url = this.props.context.pageContext.web.serverRelativeUrl;
pnp.sp.web.getFolderByServerRelativeUrl( url "/FormServerTemplates")
.files.add(file.name, file, true)
.then((data) => {
alert("File uploaded sucessfully");
})
.catch((error) => {
alert("Error is uploading");
});
}
При рендеринге используйте этот код рендеринга html
return (
<div className={ styles.maincontainer }>
<input type="file" ref={(elm) => { this._input = elm; }}></input>
<p>
<button onClick={() => this.uploadFileFromControl()} >
Upload
</button>
</p>
</div>
);
Выполните эту команду
npm install sp-pnp-js —сохранить
Импорт sp-pnp-js
импорт * как pnp из ‘sp-pnp-js’;
Ответ №2:
Причиной этой проблемы должно быть то, что pnp js импортирован неправильно.
npm install sp-pnp-js --save
Запустите эту команду в командной строке.
Официальный пример:
https://pnp.github.io/pnpjs/sp/files/#adding-files
Если вам нужна дополнительная помощь, пожалуйста, поделитесь полным кодом в файле tsx.