Загрузка SPFx и добавление вложения в список - PullRequest
0 голосов
/ 14 апреля 2019

У меня возникли трудности с загрузкой и прикреплением к элементу списка в sharepoint с использованием пакета PNP / SP.У меня нет большого опыта работы с компонентом входного файла, поэтому я думаю, что, возможно, упускаю шаг между элементом html загрузки файла и отправкой файла в веб-службу SharePoint.

До сих пор я пытался следоватьПример PNP с несколькими изменениями https://pnp.github.io/pnpjs/sp/docs/attachments/ и попыткой использовать несколько разных аргументов, но все они, как правило, приводят к 409 или 500 ошибкам, одна ошибка указывает на то, что он пытается выполнить запрос GET вместо публикации.

MyНиже приведен код, и я отправлю полные сообщения об ошибках, когда завтра доберусь до офиса, но любая помощь будет принята с благодарностью.

private setButtonsEventHandlers(): void {   
let fileUpload = document.getElementById("fileUploadInput") 
if(fileUpload) {
  fileUpload.addEventListener('change', () => { 
    this.uploadFiles(fileUpload); 
  });
}
  }

private async uploadFiles(fileUpload) {
  let file = fileUpload.files[0];
  let attachmentsArray = this.state.attachmentsToUpload;


  let _web = new Web(this.props.wpContext.pageContext.site.absoluteUrl);
  let _listItem;
  let listUrlSplit: string[] = this.props.listUrl.split("/");
let listName: string = listUrlSplit[listUrlSplit.length-1];
  _listItem = await     _web.lists.getByTitle(listName).items.getById(this.props.id);

  let attachmentUpload = await _listItem.attachmentFiles.add(file.name,file)
}

Я проверил код (ниже), заменив загрузку файла строками иэто работает, поэтому я думаю, что моя ошибка в неправильном понимании элемента входного файла

let attachmentUpload = await _listItem.attachmentFiles.add("Testfile.txt","This is test content")

Заранее всем спасибо и наслаждайтесь тем, что осталось от воскресенья;)

Andy

1 Ответ

0 голосов
/ 15 апреля 2019

Вот мое простое тестовое демо, которое работает (React framework).

Компонент .tsx

<div className={ styles.column }>
              <input type='file' id='fileUploadInput' name='myfile'/>
              <span className={ styles.title }>Welcome to SharePoint!</span>
              <p className={ styles.subTitle }>Customize SharePoint experiences using Web Parts.</p>
              <p className={ styles.description }>{escape(this.props.description)}</p>
              <a href="https://aka.ms/spfx" className={ styles.button }>
                <span className={ styles.label }>Learn more</span>
              </a>
            </div>

webpart.ts

public render(): void {
    const element: React.ReactElement<IPnpspUploadAttachementProps > = React.createElement(
      PnpspUploadAttachement,
      {
        description: this.properties.description
      }
    );

    ReactDom.render(element, this.domElement);
    this.setButtonsEventHandlers();
  }

  private setButtonsEventHandlers(): void {   
    let fileUpload = document.getElementById("fileUploadInput") 
    if(fileUpload) {
      fileUpload.addEventListener('change', () => { 
        this.uploadFiles(fileUpload); 
      });
    }
    }

    private async uploadFiles(fileUpload) {
      let file = fileUpload.files[0];
      //let attachmentsArray = this.state.attachmentsToUpload;        
      let item = sp.web.lists.getByTitle("MyList").items.getById(15);
      item.attachmentFiles.add(file.name,file).then(v => {
          console.log(v);
      });
      //let attachmentUpload = await _listItem.attachmentFiles.add(file.name,file)
    }
...