Forum Discussion
How to use a document as a Sharepoint list
A few things:
1. Can you show us your code so we can see how you're trying to add the file? The documentation you're reading shows you how to do it directly via REST, but the error message you're getting seems like it's coming from CSOM. In order to add a file to a document library directly using REST, you would make a POST request:
url: http://site url/_api/web/GetFolderByServerRelativeUrl('/Folder Name')/Files/add(url='a.txt',overwrite=true)
method: POST
body: "Contents of file"
Headers:
Authorization: "Bearer " + accessToken
X-RequestDigest: form digest value
content-length:length of post body
The body should be your file as a Blob or ArrayBuffer.
2. In order to change the metadata of the file, you need to then GET that file as a List Item object and change metadata on the List Item.
3. I would skip dealing that altogether and just use PnPJS, which would allow you to both upload the File then change the List Item metadata nicely by chaining a .then() and using the file.getItem() method.
https://github.com/pnp/pnpjs/blob/dev/packages/sp/docs/files.md#setting-associated-item-values
Essentially your code would look like this (where myFile is an ArrayBuffer or Blob):
import { sp } from "@pnp/sp"; sp.web.getFolderByServerRelativeUrl("/sites/<your site>/<your doc lib>/<your folder>/").files.add(myFile.name, myFile, true).then(f => { f.file.getItem().then(item => { item.update({ Title: "A Title", OtherField: "My Other Value",
YetAnotherField: 5 }); }); });
- youssefchJan 25, 2019Copper Contributor
First, Thank You for your reply.
Here is my code :
$urlSpo = $this->container->getParameter('repos_share_point');
$authCtx = new AuthenticationContext($urlSpo);
$authCtx->acquireTokenForUser($sharePointParameters['userName'], $sharePointParameters['password']); //authenticate $ctx = new ClientContext($urlSpo, $authCtx); $web = $ctx->getWeb();
$list = $web->getLists()->getByTitle($this->container->getParameter('folder_share_point'));
//init List resource
$itemProperties = array('Title' => $documentName . ".pdf", '__metadata' => array('type' => 'SP.Data.TasksListItem'), 'Company' => $company);
$item = $list->addItem($itemProperties); $ctx->executeQuery();To add columns to the file, I tried to manipulate it as a list item.
But this doesn't work.