我正在 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/