如何在 2sxc 模块中将使用 ADAM 上传的文件正确绑定到实体字段?
How to bind uploaded file with ADAM to entity field correctly in 2sxc module?
我需要以编程方式创建实体对象并用数据填充它。一个字段需要是一种文件类型。所以我设法创建了没有文件的实体,使用 this sample of code 在 ADAM 中上传文件。但是似乎我没有绑定它,因为它是在手动上传文件时绑定的。
手动上传文件到实体字段时,可以看到类似file:421 .../asdf.docx
的内容。但是,当我重复上面 link 中的代码示例时,字段包含可供选择并已上传的文件,但字段值为空。 IFile.Url
似乎通过 App.Data.Update
方法写入了正确的数据,但管理面板中没有显示 id。
Dictionary<string, object> fileDict = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase) {
{ "File", file.Url }
}; // file is ToSic.Sxc.Adam.IFile, returned by SaveInAdam
App.Data.Update(entityObj.EntityId, fileDict); // entityObj is ToSic.Eav.Data.IEntity, returned by App.Data.Create
我想知道如果它没有像手动上传那样的绑定会不会有一些不好的后果以及如何正确地做到这一点?
要添加文件,您实际上是将它们添加到一个字段中(这样 UI 就可以像普通用户添加的那样提供它们)。查看 https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Dnn.Web.IDynamicWebApi.html#ToSic_Sxc_Dnn_Web_IDynamicWebApi_SaveInAdam_System_String_System_IO_Stream_System_String_System_String_System_Nullable_System_Guid__System_String_System_String_
顺便说一句:最好检查一下 MobiusForms,看看它是如何完成的。
我忘了说:这里是文档 https://docs.2sxc.org/web-api/custom-web-api-dotnet-saveinadam.html
进一步说明:
- SaveInAdam 会将文件放在项目的 ADAM 文件夹中。由于可能添加了很多文件,因此只是假设该字段将是库类型 - 它不会在实体中存储任何内容,它只是自动找到属于该字段的文件夹。
- 如果您不想使用库功能而实际上只是使用 link 的单个字段,那么您还必须将诸如“file:74”之类的术语保存到该字段的值中。
我需要以编程方式创建实体对象并用数据填充它。一个字段需要是一种文件类型。所以我设法创建了没有文件的实体,使用 this sample of code 在 ADAM 中上传文件。但是似乎我没有绑定它,因为它是在手动上传文件时绑定的。
手动上传文件到实体字段时,可以看到类似file:421 .../asdf.docx
的内容。但是,当我重复上面 link 中的代码示例时,字段包含可供选择并已上传的文件,但字段值为空。 IFile.Url
似乎通过 App.Data.Update
方法写入了正确的数据,但管理面板中没有显示 id。
Dictionary<string, object> fileDict = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase) {
{ "File", file.Url }
}; // file is ToSic.Sxc.Adam.IFile, returned by SaveInAdam
App.Data.Update(entityObj.EntityId, fileDict); // entityObj is ToSic.Eav.Data.IEntity, returned by App.Data.Create
我想知道如果它没有像手动上传那样的绑定会不会有一些不好的后果以及如何正确地做到这一点?
要添加文件,您实际上是将它们添加到一个字段中(这样 UI 就可以像普通用户添加的那样提供它们)。查看 https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Dnn.Web.IDynamicWebApi.html#ToSic_Sxc_Dnn_Web_IDynamicWebApi_SaveInAdam_System_String_System_IO_Stream_System_String_System_String_System_Nullable_System_Guid__System_String_System_String_
顺便说一句:最好检查一下 MobiusForms,看看它是如何完成的。
我忘了说:这里是文档 https://docs.2sxc.org/web-api/custom-web-api-dotnet-saveinadam.html
进一步说明:
- SaveInAdam 会将文件放在项目的 ADAM 文件夹中。由于可能添加了很多文件,因此只是假设该字段将是库类型 - 它不会在实体中存储任何内容,它只是自动找到属于该字段的文件夹。
- 如果您不想使用库功能而实际上只是使用 link 的单个字段,那么您还必须将诸如“file:74”之类的术语保存到该字段的值中。