You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中从OneDrive URL流式读取文本文件?

问题:OneDrive公开URL请求返回预览网页而非文本文件内容

本地读取文本文件的代码可正常运行:

string strExeFilePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
string strWorkPath = System.IO.Path.GetDirectoryName(strExeFilePath) + "/creds.txt";
string[] lines = await System.IO.File.ReadAllLinesAsync(strWorkPath);

将文件托管在OneDrive并设置公开访问后,使用HTTP请求获取文件时返回的是OneDrive预览网页内容(浏览器访问该URL也显示预览页面):

HttpClient client = new HttpClient();
string result = client.GetStringAsync("https://1drv.ms/t/some_public_file_url").Result;

解决办法

OneDrive默认的共享URL指向文件预览页面,而非直接文件内容链接,需修改URL获取直接下载地址:

  • 修改短链接格式:把共享URL中的/t/替换为/u/,并在末尾追加?download=1。例如原URL https://1drv.ms/t/some_public_file_url 改为:

    https://1drv.ms/u/some_public_file_url?download=1
    
  • 复制直接下载链接:如果上述方法无效,可在浏览器打开共享URL,点击页面中的「下载」按钮,复制跳转后的下载链接直接使用。

修改后的请求代码示例:

HttpClient client = new HttpClient();
// 使用修改后的直接下载URL
string directDownloadUrl = "https://1drv.ms/u/some_public_file_url?download=1";
string fileContent = await client.GetStringAsync(directDownloadUrl);
// 按行分割内容,对齐本地读取逻辑
string[] lines = fileContent.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

注意事项

  • 确保文件共享权限设置为允许任何人查看和下载,而非仅允许预览。
  • 若文件体积较大,建议使用GetStreamAsync替代GetStringAsync,避免内存占用过高。

内容的提问来源于stack exchange,提问作者wenreloz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:05:25