我正在开发mvc4中的网页,我想使用jquery显示pdf文件。我将文件存储在server.mappath之外。下面是我的控制器代码。
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中我只收到文件名,下面的代码行只有在我的root文件中的uploadfile文件夹才有效。
object = object.replace(/{FileName}/g, "../UploadedFile/" + FileName);
但是如果我将文件存储在root之外,例如,如果我将其保存在@“F:\ UploadedFile”路径中,则jquery代码将无法直接访问文件。那么我可以使用上面的代码访问文件和显示的方式是什么?我不确定我只想返回文件名或完整路径?如果它是完整路径那么我如何在jquery中呈现它?请给我一些宝贵的意见。感谢
答案 0 :(得分:2)
你需要在控制器中有一个返回FileResult的Action,在这个操作中你将从F:\ Drive中读取文件并将其作为StreamResult或FileResult返回,然后在你的JQuery中,而不是写入文件名,您将使用@ Url.Actiont输出检索文件的Action的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);
}
});
}