使用ASP MVC从远程服务器下载文件

时间:2016-04-21 10:55:36

标签: asp.net asp.net-mvc

我有一个可以使用控制器访问的网络驱动器。例如" \ mydrive \ filestorage&#34 ;.我希望用户能够下载存储在此服务器上的文件。这意味着我无法使用URL,因为这些文件位于Web服务器根目录之外。我也无法为此驱动器设置Web服务器,除了使用控制器读取文件并以这种方式下载之外,我无法访问此数据。

我找到了一些教程来为服务器上的文件执行此操作,但是在使用远程文件时我无法使用它。我想要一个下载链接,你点击它并下载文件。这是我的代码

<span class="btn btn-success" id="add-address">Add Address</span>

我收到以下异常

  

System.IO.DirectoryNotFoundException:找不到部分内容   路径&#39; C:\ inetpub \ wwwroot ...

filepath变量将是网络驱动器的路径。

public ActionResult DownloadFile(string id)
{
    UploadedDocument document = new UploadedDocument(Int32.Parse(id));
    string filecontents = System.IO.File.ReadAllText(document.FilePath);
    string filetype = Helpers.GetMimeType(document.FilePath);
    return File(filecontents, filetype);
}

正确填充文件内容和文件类型的2个变量。返回文件时抛出异常。当我在调试模式下运行代码时,将填充2个变量,如下所示。

\\Netdrive\Uploads\somefile.txt

3 个答案:

答案 0 :(得分:3)

File(string, string)需要文件名和mime类型,但是您将文件内容作为字符串传递。

直接从您的网络驱动器提供文件:

public ActionResult DownloadFile(string id)
{
    UploadedDocument document = new UploadedDocument(Int32.Parse(id));
    string filetype = Helpers.GetMimeType(document.FilePath);
    return File(document.FilePath, filetype);
}

要强制下载文件(并绕过默认浏览器设置文件处理,例如浏览器中显示的PDF),请添加文件名作为File方法的第三个参数:

return File(document.FilePath, filetype, "myFileName.pdf");

答案 1 :(得分:1)

要直接下载文件,您只需

即可
return File(path of file, System.Net.Mime.MediaTypeNames.Application.Octet, name:file will be download using this name);
控制器方法

中的

例如 下载文件:http://localhost:60494/Content/Audio/123456.mp3

 var audio_path = "/" + path.Substring(path.IndexOf("Content"));
    String audio_name = path.Substring(path.LastIndexOf("/") + 1);
    return File(audio_path, System.Net.Mime.MediaTypeNames.Application.Octet, audio_name);

答案 2 :(得分:-1)

请使用以下代码在MVC中下载文件

MyCollection.update(id, {
  $set: {docYouWantToChange: doc}
});