ASP.NET设计网络硬盘之下载或在线查看实现代码


在ASP.NET中实现网络硬盘的下载或在线查看功能,通常需要后端(ASP.NET)与前端(如HTML/CSS/JavaScript)的协同工作,以及可能涉及到的文件存储系统(如文件服务器、云存储等)。下面我将分别简要介绍两种场景的实现思路及关键代码片段。

### 1. 文件下载功能

文件下载功能相对简单,主要是设置响应的`Content-Type`为`application/octet-stream`(或其他适合下载的类型),并通过`TransmitFile`方法将文件内容发送给客户端。


public ActionResult DownloadFile(string fileName)
{
    // 假设有一个方法来获取文件的物理路径
    string filePath = GetFilePath(fileName);

    if (!System.IO.File.Exists(filePath))
    {
        return HttpNotFound();
    }

    // 设置文件名为下载时的文件名
    string mimeType = "application/octet-stream"; // 或其他适合文件的MIME类型
    Response.AppendHeader("Content-Disposition", $"attachment; filename=\"{fileName}\"");

    // 返回文件
    return File(filePath, mimeType);
}

// 假设的方法,用于获取文件的物理路径
private string GetFilePath(string fileName)
{
    // 实现你的逻辑来找到文件的路径
    // 这里只是一个示例
    return Path.Combine(Server.MapPath("~/App_Data/Files"), fileName);
}

### 2. 在线查看功能

在线查看功能通常涉及将文件内容以适合浏览器展示的方式呈现。这取决于文件的类型(如文本、图片、PDF等)。

#### 文本文件

对于文本文件,可以直接读取文件内容并以HTML格式返回。


public ActionResult ViewTextFile(string fileName)
{
    string filePath = GetFilePath(fileName);

    if (!System.IO.File.Exists(filePath))
    {
        return HttpNotFound();
    }

    string fileContent = System.IO.File.ReadAllText(filePath);

    // 可以简单地将内容放入一个<pre>标签中返回
    return Content($"<pre>{HtmlEncoder.Default.Encode(fileContent)}</pre>", "text/html");
}

#### 图片或PDF

对于图片或PDF文件,通常可以直接设置`Content-Type`为对应的MIME类型,并让浏览器直接渲染文件。


public ActionResult ViewFile(string fileName)
{
    string filePath = GetFilePath(fileName);

    if (!System.IO.File.Exists(filePath))
    {
        return HttpNotFound();
    }

    string mimeType = MimeMapping.GetMimeMapping(filePath); // 使用System.Net.Mime.MimeMapping获取MIME类型

    // 返回文件,浏览器会根据MIME类型自动处理
    return File(filePath, mimeType);
}

注意:对于在线查看PDF文件,有时可能需要在前端使用专门的库(如PDF.js)来渲染PDF内容,而不是直接返回文件流。

这些代码片段提供了一个基础的框架,根据具体需求你可能需要进行调整或添加额外的错误处理、权限验证等逻辑。