jquery - 如何在jquery中显示存储在mvc4中Server.mappath之外的文件?

标签 jquery asp.net-mvc asp.net-mvc-4

我正在 mvc4 中开发网页,我想使用 jquery 显示 pdf 文件。我将文件存储在 server.mappath 之外。下面是我的 Controller 代码。

  public ActionResult Download(int? ClientId)
        {
            service.Service objService = new service.Service();
            DashboardBAL objdb = new DashboardBAL();
            string filepath = objdb.GetFilepath(ClientId.GetValueOrDefault(0));
            string folderName = @"F:\UploadedFile";
            //string serverMappath = ("~/UploadedFile");
            string serverMappath = (folderName);
            // byte[] result = objService.DownloadFileFromDMS(filepath);
            byte[] result = objService.DownloadFileFromDMS(folderName);
            string contentType = MimeMapping.GetMimeMapping(filepath);
            string FileName = Path.GetFileName(filepath);
            var cd = new System.Net.Mime.ContentDisposition
            {
                FileName = Path.GetFileName(filepath),
                Inline = true,
            };
            if (!System.IO.Directory.Exists(serverMappath))
            {
                System.IO.Directory.CreateDirectory(serverMappath);
            }
            string strdocPath = serverMappath + @"\" + FileName;
            if (result != null)
            {
                FileStream objfilestream = new FileStream(strdocPath, FileMode.Create, FileAccess.Write);
                objfilestream.Write(result, 0, result.Length);
                objfilestream.Close();
            }
            return Json(FileName, JsonRequestBehavior.AllowGet);
        }

我正在@“F:\UploadedFile”中查找文件,该文件位于我的根目录之外。所以不能直接访问。在上面的代码中,我也检索文件名和相应的文件字节。 下面是我的 jquery 代码来显示文件。

  function ShowFiepopup(FileName) {

    $("#dialog").dialog({
        modal: true,
        title: "Preview of " + FileName,
        width: 850,
        height: 600,
        buttons: {
            Close: function () {
                $(this).dialog('close');
            }
        },

        open: function () {
            var object = "<object data=\"{FileName}\" type=\"application/pdf\" Zoom=\"100%\" width=\"800px\" height=\"600px\">";
            object += "If you are unable to view file, you can download from <a href=\"{FileName}\">here</a>";
            object += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
            object += "</object>";
            object = object.replace(/{FileName}/g, "../UploadedFile/" + FileName);
            $("#dialog").html(object);

        }
    });
};


function Download(pClientid) {

       $.ajax(
        {
            type: "GET",
            cache: false,
            data: { ClientId: pClientid },
            dataType: "json",
            cache: false,
            url: '/TestRendering/Download',
            headers: {
                'VerificationToken': forgeryId
            },
            success: function (data) {
                ShowFiepopup(data);
            }
        });
    }

在 jquery 中,我仅接收文件名,下面的代码行仅在我的根目录中的 uploadedfile 文件夹时才起作用。

    object = object.replace(/{FileName}/g, "../UploadedFile/" + FileName);

但是,如果我将文件存储在根目录之外,例如,如果我将其保存在 @"F:\UploadedFile"路径中,那么 jquery 代码将无法直接访问文件。那么我可以使用上面的代码访问文件和显示的方式是什么?我不确定我只想返回文件名还是完整路径?如果它是完整路径那么我如何在 jquery 中呈现它?请给我一些宝贵的意见。谢谢

最佳答案

您需要在 Controller 内有一个返回 FileResult 的操作,在该操作内,您将从 F:\Drive 读取文件并将其作为 StreamResult 或 FileResult 返回,然后在 JQuery 中,而不是写入文件名,您将使用 @Url.Actiont 输出检索文件的操作的 URL,这样它看起来总是存储在您的 wwwroot 中

 function Download(pClientid) {

   $.ajax(
    {
        type: "GET",
        cache: false,
        data: { ClientId: pClientid },
        dataType: "json",
        cache: false,
        url: '@Url.Action("actionName","ControllerName")',
        headers: {
            'VerificationToken': forgeryId
        },
        success: function (data) {
            ShowFiepopup(data);
        }
    });
}

关于jquery - 如何在jquery中显示存储在mvc4中Server.mappath之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761951/

相关文章:

php - jQuery Get 请求当前 session

javascript - 使用 javascript 删除主页内容

javascript - 如何推断复选框值?

.net-4.0 - 上传文件 MVC 4 Web API .NET 4

asp.net - MVC 4 可以在.net 3.5 上运行吗?

javascript - 在 JavaScript 中访问对象数据的正确技术是什么?

ASP.NET MVC - 使用 jQuery 不显眼验证防止提交无效表单

asp.net-mvc - 应用服务层作为静态类

c# - Linq to SQL、SQL Server 2008 和优化

c# - ASP.NET MVC 4 将 Windows 身份验证应用于单个 Controller ?