我有一个可以使用控制器访问的网络驱动器。例如" \ 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
答案 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}
});