SharePoint SPFX:无法获取 属性 'Context'
SharePoint SPFX: Unable to get property 'Context'
我正在处理自定义 SPFX 命令集。它打开一个带有 iframe 的对话框到第 3 方平台。我可以通过邮寄消息收到 json。从这个 json,我将它的数据转换为一个文件,带有适当的元数据。所有这一切都像一个魅力...除了...
现在我想把这个文件上传到文档库,这让我很抓狂。
我在引用:
import "@pnp/polyfill-ie11";
import { ConsoleListener, Logger, LogLevel } from "@pnp/logging";
import { sp } from "@pnp/sp";
import { Web } from "@pnp/sp/webs";
import "@pnp/sp/webs";
import "@pnp/sp/files";
import "@pnp/sp/folders";
import { Base64 } from 'js-base64';
在我的对话框组件中,我尝试使用 web.getFolderByServerRelativeUrl 上传文件。但是这个方法失败了,我真的不明白为什么......看pnp参考资料(https://pnp.github.io/pnpjs/sp/files/),似乎是正确的方法。
var file = Base64.atob(response.Data);
console.log("File length : " + file.length);
let web = Web("https://MyTenant.sharepoint.com/sites/Customer"); // this is successful
await web.getFolderByServerRelativeUrl("/sites/Customer/Shared%20Documents/")
.files.add(response.fileName, file, true); // this fails
上下文在 CommandSet onInit() 上设置
@override
public onInit(): Promise<void> {
Log.info(LOG_SOURCE, 'Initialized myCommandSet');
pnpSetup({
spfxContext: this.context
});
return Promise.resolve();
}
希望你们能给我指明正确的方向...
编辑:
错误:
HTTP400: INVALID REQUEST - The request could not be processed by the server
due to an invalid syntax
POST - https://MyDevTenant.sharepoint.com/sites/customer/
_api/web/getFolderByServerRelativeUrl
('%2Fsites%2Customer%2FShared%2520Documents%2F')
/files/add(overwrite=true,url='')
是文档库中的 url 搞砸了吗?
感谢威尔曼给我指明了方向。
这成功了:
import { sp, Web, IWeb } from "@pnp/sp/presets/all";
import "@pnp/sp/webs";
import "@pnp/sp/lists";
import "@pnp/sp/files";
import "@pnp/sp/folders";
const web = await sp.web();
const list = sp.web.getList("Documents");
const listId = await list.select("Id")();
await sp.web.lists.getById(listId.Id).rootFolder.files.add(docname, file, true);
我正在处理自定义 SPFX 命令集。它打开一个带有 iframe 的对话框到第 3 方平台。我可以通过邮寄消息收到 json。从这个 json,我将它的数据转换为一个文件,带有适当的元数据。所有这一切都像一个魅力...除了...
现在我想把这个文件上传到文档库,这让我很抓狂。
我在引用:
import "@pnp/polyfill-ie11";
import { ConsoleListener, Logger, LogLevel } from "@pnp/logging";
import { sp } from "@pnp/sp";
import { Web } from "@pnp/sp/webs";
import "@pnp/sp/webs";
import "@pnp/sp/files";
import "@pnp/sp/folders";
import { Base64 } from 'js-base64';
在我的对话框组件中,我尝试使用 web.getFolderByServerRelativeUrl 上传文件。但是这个方法失败了,我真的不明白为什么......看pnp参考资料(https://pnp.github.io/pnpjs/sp/files/),似乎是正确的方法。
var file = Base64.atob(response.Data);
console.log("File length : " + file.length);
let web = Web("https://MyTenant.sharepoint.com/sites/Customer"); // this is successful
await web.getFolderByServerRelativeUrl("/sites/Customer/Shared%20Documents/")
.files.add(response.fileName, file, true); // this fails
上下文在 CommandSet onInit() 上设置
@override
public onInit(): Promise<void> {
Log.info(LOG_SOURCE, 'Initialized myCommandSet');
pnpSetup({
spfxContext: this.context
});
return Promise.resolve();
}
希望你们能给我指明正确的方向...
编辑:
错误:
HTTP400: INVALID REQUEST - The request could not be processed by the server
due to an invalid syntax
POST - https://MyDevTenant.sharepoint.com/sites/customer/
_api/web/getFolderByServerRelativeUrl
('%2Fsites%2Customer%2FShared%2520Documents%2F')
/files/add(overwrite=true,url='')
是文档库中的 url 搞砸了吗?
感谢威尔曼给我指明了方向。 这成功了:
import { sp, Web, IWeb } from "@pnp/sp/presets/all";
import "@pnp/sp/webs";
import "@pnp/sp/lists";
import "@pnp/sp/files";
import "@pnp/sp/folders";
const web = await sp.web();
const list = sp.web.getList("Documents");
const listId = await list.select("Id")();
await sp.web.lists.getById(listId.Id).rootFolder.files.add(docname, file, true);