我正在尝试通过ClientAPI获取sensenet上存在的文件流。但我没有找到任何关于这件事的文件。我也尝试过使用RestCaller SenseNET API调用,但是我不知道如何获得输入参数FieldID.通过文件的路径(ex: /Root/Sites/Test/file.txt)
我有一个服务器api,它封装了来自客户端应用程序的sensenet内容。因此,sensenet上的请求都在服务器端。我试着用contentId获取流文件..。但是它没有带来Content.Result的ID (带来ID的对象(我猜.))。例如,返回是:
内容= Id = 1016,状态= WaitingForActivation,方法= "{null}",结果=“{尚未计算的}”
这是我的密码:
var fileId = SenseNet.Client.Content.LoadAsync(parentPath).Result.Id;
var req = RESTCaller.GetStreamRequest(fileId);
try
{
using (var response = await req.GetResponseAsync())
{
using (var stream = response.GetResponseStream())
{
using (var streamReader = new MemoryStream())
{
stream.CopyTo(streamReader);
return streamReader.ToArray();
}
}
}
}
catch (WebException webex)
{
throw await RESTCaller.GetClientExceptionAsync(webex, req.RequestUri.ToString());
}发布于 2017-02-11 16:26:59
一个类似的例子,完全异步。如果可能,请不要将异步API调用转换为同步调用。即使在ASP.NET环境中,也应该可以将您的方法设计为异步,而不是强制它们同步运行。
下面的示例是异步MVC控制器方法。它首先获取文件id (当然,如果已经有文件id,可以跳过这一点),而不是下载流,然后立即将字节写入输出流。
public async Task DownloadAsync()
{
var path = "/Root/YourDocuments/test1.txt";
var fileContent = await SNC.Content.LoadAsync(path);
var fileId = fileContent.Id;
var req = SNC.RESTCaller.GetStreamRequest(fileId);
Response.ClearContent();
Response.AddHeader("content-disposition", $"attachment;filename={fileContent.Name}");
Response.ContentType = "text/plain";
Response.ContentEncoding = Encoding.UTF32;
using (var response = await req.GetResponseAsync())
{
using (var stream = response.GetResponseStream())
{
await stream.CopyToAsync(Response.OutputStream);
}
}
Response.End();
}如果不使用MVC,也可以在HttpTaskAsyncHandler或异步ASP.NET页面上这样做。如果你想让我们提供一个更详细的例子,请告诉我们更多关于你的环境和商业案例的信息。
发布于 2017-02-09 11:49:26
为了解决我的具体问题,我必须创建任务,直接返回它。
return Task.Factory.StartNew(() =>
{
using (var content = Content.LoadAsync(path))
{
var fileId = content.Result.Id;
var req = RESTCaller.GetStreamRequest(fileId);
using (var response = req.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var streamReader = new MemoryStream())
{
stream.CopyTo(streamReader);
return streamReader.ToArray();
}
}
}
}
}).WaitAndUnwrapException();发布于 2017-02-03 10:38:44
我猜你指的是fileId,FieldID。要下载的文件通常是从UI上的列表中选择的。我可以推荐的最佳选择是,您应该获得文件的Id以及用于在列表中显示的其他属性。然后,您只需从现在具有Id的列表中获取所选文件。希望我能帮上忙。
https://stackoverflow.com/questions/42015791
复制相似问题