C# 从“获取文件”;file://A/"
如何从与C# 从“获取文件”;file://A/",c#,asp.net-core,asp.net-core-2.0,C#,Asp.net Core,Asp.net Core 2.0,如何从与相同的外部路径获取文件file://A/B/C/D/“ 在本地计算机中,我可以访问“file://”的路径,但用户没有访问权限。 现在我想从“中读取一些文件”file://A/B/C/D/“并使用户可以下载 我怎么做 (当前目录为“”) 公共异步任务下载文档(字符串berichtsummer) { var constantPath=”file://A/B/C/D/"; 使用(FileStream FileStream=System.IO.File.OpenRead(constantPat
相同的外部路径获取文件file://A/B/C/D/“
在本地计算机中,我可以访问“file://”的路径,但用户没有访问权限。
现在我想从“中读取一些文件”file://A/B/C/D/“并使用户可以下载
我怎么做
(当前目录为“”)
公共异步任务下载文档(字符串berichtsummer)
{
var constantPath=”file://A/B/C/D/";
使用(FileStream FileStream=System.IO.File.OpenRead(constantPath))
{
MemoryStream memStream=新的MemoryStream();
SetLength(fileStream.Length);
读取(memStream.GetBuffer(),0,(int)fileStream.Length);
返回文件(文件流,“应用程序/八位字节流”);
}
}
单击下载链接时,出现以下错误:
IOException:文件名、目录名或卷标的语法
不正确:“
[
路径视图”file://A/B/C/D/“:
本地文件路径不是“file://”。您可以使用以下本地文件路径正常读取文件:
var path = "C:\\...";
然后将内容发送到客户端浏览器
如果文件不在本地计算机上,唯一的方法是使用网络共享访问它
var path = @"\\Server\Path\...";
本地文件路径不是“file://”。您可以使用以下本地文件路径正常读取文件:
var path = "C:\\...";
然后将内容发送到客户端浏览器
如果文件不在本地计算机上,唯一的方法是使用网络共享访问它
var path = @"\\Server\Path\...";
将constantPath更改为
“\\\\A\\B\\C\\D\\”
现在,您可以将路径
发送到下载文档
方法:
public async Task<IActionResult> DownloadDocument(string path)
{
byte[] berichtData = null;
FileInfo fileInfo = new FileInfo(path);
long berichtFileLength = fileInfo.Length;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
berichtData = br.ReadBytes((int)berichtFileLength);
return File(berichtData, MimeTypeHelper.GetMimeType("pdf"));
}
公共异步任务下载文档(字符串路径)
{
字节[]数据=null;
FileInfo FileInfo=新的FileInfo(路径);
long berichtFileLength=fileInfo.Length;
FileStream fs=newfilestream(路径,FileMode.Open,FileAccess.Read);
BinaryReader br=新的BinaryReader(fs);
berichtData=br.ReadBytes((int)berichtFileLength);
返回文件(berichtData,mimetypeheloper.GetMimeType(“pdf”);
}
将constantPath更改为“\\\\A\\B\\C\\D\\”
现在,您可以将路径
发送到下载文档
方法:
public async Task<IActionResult> DownloadDocument(string path)
{
byte[] berichtData = null;
FileInfo fileInfo = new FileInfo(path);
long berichtFileLength = fileInfo.Length;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
berichtData = br.ReadBytes((int)berichtFileLength);
return File(berichtData, MimeTypeHelper.GetMimeType("pdf"));
}
公共异步任务下载文档(字符串路径)
{
字节[]数据=null;
FileInfo FileInfo=新的FileInfo(路径);
long berichtFileLength=fileInfo.Length;
FileStream fs=newfilestream(路径,FileMode.Open,FileAccess.Read);
BinaryReader br=新的BinaryReader(fs);
berichtData=br.ReadBytes((int)berichtFileLength);
返回文件(berichtData,mimetypeheloper.GetMimeType(“pdf”);
}
您似乎已经有了代码,所以我不确定问题出在哪里?这没有任何意义。文件:
URI方案只能在本地计算机上访问。asp.net服务器代码从未看到任何对此类URI的访问,也不需要做任何事情(也没有能力)在访问客户端的本地文件系统时进行调解。是否尝试从客户端计算机下载“随机”文件?幸运的是,您无法做到这一点!请注意,当您在本地尝试时,它可能会起作用,因为“客户端”和“服务器”机器实际上是一样的。您使用的是带有本地文件IO方法的URI。为什么?至于其余的代码,流的主要好处是您不必在一个巨大的缓冲区中加载或写入所有内容。您可以使用stream.CopyTo
将一个流的内容复制到另一个流的内容。最后,file
rk与本地文件或流。使用memorystream
这里的方法是没有意义的。这听起来是XY问题的一个例子。你有一个问题X,认为Y是解决方案,所以当你遇到麻烦时,你会问Y,而不是X。在这种情况下,为什么不直接写返回文件(路径,“应用程序/八位字节流”)
?为什么URI、内存流和显式流长度?您似乎已经有了代码,所以我不确定问题出在哪里?这没有任何意义。文件:
URI方案只能在本地计算机上访问。asp.net服务器代码从未看到对此类URI的任何访问,也不需要执行任何操作(也不能)在访问客户端的本地文件系统时进行调解。您是否试图从客户端的计算机下载“随机”文件?幸运的是,您无法做到这一点!请注意,当您在本地尝试时,它可能会起作用,因为“客户端”和“服务器”机器实际上是一样的。您使用的是带有本地文件IO方法的URI。为什么?至于其余的代码,流的主要好处是您不必在一个巨大的缓冲区中加载或写入所有内容。您可以使用stream.CopyTo
将一个流的内容复制到另一个流的内容。最后,file
rk与本地文件或流。使用memorystream
这里的方法是没有意义的。这听起来是XY问题的一个例子。你有一个问题X,认为Y是解决方案,所以当你遇到麻烦时,你会问Y,而不是X。在这种情况下,为什么不直接写返回文件(路径,“应用程序/八位字节流”)
?为什么要使用URI、内存流和显式流长度?