如何在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。例如原URLhttps://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
相关产品推荐
相关产品推荐

