标签: filecontentresult

在具有名称的浏览器中使用ASP.NET MVC FileContentResult流文件?

有没有办法在浏览器中使用具有特定名称的ASP.NET MVC FileContentResult来流式传输文件?

我注意到你可以有一个FileDialog(打开/保存),或者你可以在浏览器窗口中流式传输文件,但是当你尝试保存文件时它会使用ActionName.

我有以下场景:

byte[] contents = DocumentServiceInstance.CreateDocument(orderId, EPrintTypes.Quote);
result = File(contents, "application/pdf", String.Format("Quote{0}.pdf", orderId));
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我可以流式传输字节,但是给用户提供了一个OPEN/SAVE文件对话框.我想在浏览器窗口中实际传输此文件.

如果我只使用FilePathResult,它会在浏览器窗口中显示该文件,但是当我单击"保存"按钮将文件保存为PDF时,它会显示操作名称作为文件的名称.

有没有遇到过这个?

asp.net-mvc filecontentresult fileresult

58
推荐指数
5
解决办法
11万
查看次数

找不到文件时处理FileContentResult

我有一个控制器操作,根据容器引用名称(即blob中文件的完整路径名称)从azure blob下载文件.代码看起来像这样:

public FileContentResult GetDocument(String pathName)
{
    try
    {
        Byte[] buffer = BlobStorage.DownloadFile(pathName);
        FileContentResult result = new FileContentResult(buffer, "PDF");
        String[] folders = pathName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
        // get the last one as actual "file name" based on some convention
        result.FileDownloadName = folders[folders.Length - 1];

        return result;
    }
    catch (Exception ex)
    {
        // log error
    }
    // how to handle if file is not found?
    return new FileContentResult(new byte[] { }, "PDF");
}
Run Code Online (Sandbox Code Playgroud)

BlobStorage班有我的助手类,以从团块下载流.

我的问题在代码注释中说明:当找不到文件/流时,我应该如何处理场景?目前,我传递的是一个空的PDF文件,我觉得这不是最好的方法.

c# azure-storage-blobs filecontentresult asp.net-mvc-2

9
推荐指数
2
解决办法
1万
查看次数

在ASP.NET MVC 3视图中渲染System.Drawing.Image的最佳方法

我有一个System.Drawing.Image类型的对象,并希望在视图中显示此图像.最好的方法是什么?

我找到了一些可能适合这种情况的自定义Html Helper方法.还找到了一个使用新动作方法的示例,该方法返回一个FileContentResult以便拉出这样的东西.我想知道哪种技术最好,最容易实现.

编辑

更具体地说,我在Controller中的System.Drawing.Image变量中有图像,我希望在视图中显示该变量.

html-helper filecontentresult asp.net-mvc-3

7
推荐指数
1
解决办法
8173
查看次数

在操作中设置 PDF 的页面标题

我有一个显示 pdf 的操作

public ActionResult MyPdf()
{
    var response = pdfService.MyPdf(new PdfRequest() { SiteId = siteSession.ActiveSiteId });

    return File(response.Pdf, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)

该服务打开 PDF,使用数据库中的数据填写表单,然后传回容器类。 response.Pdf是一个byte[].

我想要做的是设置打开 PDF 时浏览器使用的页面标题。目前,File(response.Pdf, "application/pdf");将允许我的浏览器(chrome)显示pdf。

如果我将其更改为File(response.Pdf, "application/pdf", "My PDF File Name");,则不会显示 pdf,但会自动下载。

我的操作没有定义视图。如何在浏览器中显示 PDF,而不强制下载并通过操作方法设置页面标题?

c# pdf page-title filecontentresult asp.net-mvc-2

6
推荐指数
0
解决办法
2906
查看次数

使用ASP.NET MVC在Internet Explorer中"无法下载文件"

所以我FileContentResult从这样的动作返回一个:

return File(pck.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MyExcelFile.xlsx");
Run Code Online (Sandbox Code Playgroud)

在IE中单击"打开"(我使用的是IE9,版本9.0.8112.16421)时,会显示"无法下载文件",并向用户显示"重试"按钮.如果他们单击"重试",则可以正常工作.如果他们单击"保存",则工作正常.在Firefox中,它工作正常.

如何在第一次单击"打开"时允许用户打开文件?

asp.net-mvc internet-explorer filecontentresult

6
推荐指数
1
解决办法
8597
查看次数

Asp.net MVC FileContentResult - 阻止在浏览器中打开

我的一个控制器操作将文件返回给用户.无论文件类型如何,我都希望向用户显示下载(打开/保存)对话框.当文件类型为.doc,.docx,.xlsx等时,这可以正常工作,但是当文件是.txt,.xps,.pdf(有时)或.html时,它会在浏览器中打开.

有没有办法阻止文件在浏览器中打开,只允许用户在单独的窗口中打开它而不导航离开当前页面?

该文件的请求是使用jQuery的$.ajax({}).

相关阅读:具有浏览器处理该请求,并给予弹出,而不是AJAX调用接收文件的conent作为响应字符串被解释这个ansewr,但这个问题地址迫使浏览器处理文件以某种方式一次收到了.

ajax asp.net-mvc jquery filecontentresult

5
推荐指数
1
解决办法
3083
查看次数

在带有MemoryStream的xml末尾有很多意想不到的"nul"字符

我为用户编写了一个动作,用于下载生成的xml,而不必将其写入服务器磁盘,但将其保存到内存中.

这是我的代码:

public FileContentResult MyAction()
{
  MemoryStream myStream = new MemoryStream();
  XDocument xml = GenerateXml(...);
  xml.Save(myStream );
  myStream .Position = 0;
  return File(myStream.GetBuffer(), "text/xml", "myFile.xml");
}
Run Code Online (Sandbox Code Playgroud)

一切似乎工作正常,XML是正确的,我可以下载文件,但我不明白为什么我的文件末尾有691920"nul"caracters(这些caracters的数量似乎与长度有关)的xml):

在此输入图像描述

它们来自哪里?我怎么能摆脱它们?

[更新]我试过这个:

public FileContentResult MyAction()
{
  XDocument xml = GenerateXml(...);
  byte[] bytes = new byte[xml.ToString().Length * sizeof(char)];
  Buffer.BlockCopy(xml.ToString().ToCharArray(), 0, bytes, 0, bytes.Length);
  return File(bytes, "text/xml", "myFile.xml");
}
Run Code Online (Sandbox Code Playgroud)

我没有得到"nul"角色.所以我想这是MemoryStream在文件末尾添加额外的caracters.所以在我的例子中,第二个代码解决了我的问题.

但我也生成了一个我无法阅读的Word文档(由于内容存在问题,因此无法打开xxx.docx).我想我在这里遇到同样的问题,内存流在文件末尾添加额外的caracters并破坏它.

c# asp.net-mvc memorystream linq-to-xml filecontentresult

5
推荐指数
1
解决办法
1587
查看次数

如何通过Jquery调用MVC FileContentResult并让它提示用户保存它的返回值?

我正在从MVC 3网站生成CSV并使用FileContentResult将其传递给用户.这很好用但是生成csv需要30秒,因此在向用户提供保存提示之前30秒.

    public virtual FileContentResult GetSpreadsheet(string id)
    {
        var service = new SpreadsheetService();
        var result = service.GetCSV();
        return File(new System.Text.UTF8Encoding().GetBytes(result.Message), "text/csv", "Report123.csv");
    }
Run Code Online (Sandbox Code Playgroud)

所以我以为我只是通过JQuery调用它 - 但这(不出所料!)只是将CSV转储到页面.

            $.post("/Home/GetSpreadsheet/" + id, null, function (data) {
                $('#resultDiv').html(data);
            });
Run Code Online (Sandbox Code Playgroud)

有谁知道我现在如何生成保存提示我已经有数据了?谢谢

model-view-controller jquery filecontentresult asp.net-mvc-3

4
推荐指数
3
解决办法
2万
查看次数

ASP.NET MVC 4 FileContentResult运行两次

我目前正在尝试将存储在数据库中的图像视为BLOB,为此,我创建了一个FileContentResult类型的Controller Action,如下所示:

public FileContentResult ImageFile(string imageId)
    {
        var client = new WcfTestClient();

        DataTable table = client.GetImageData(imageId);
        var image = ConvertToBytes(table);
        byte[] bytes;

        bytes = image[0].Values.ElementAt(0);

        return File(bytes, @"image/png");
    }
Run Code Online (Sandbox Code Playgroud)

它从数据库中获取正确的图像数据,ConvertToBytes()也正常工作但由于某种原因,在将图像返回到View后,它会跳回到顶部并再次运行.

我正在使用Ajax从我的View中调用方法,如下所示:

$.ajax({
    url: "/Home/ImageFile",
    type: "GET",
    data: { "imageId": imageId },
    success: function (data) {
        var image = document.createElement('img');
        image.src = "/Home/ImageFile?id=" + imageId;
        image.width = 100;
        image.height = 100;
        div.appendChild(image);
    }
});
Run Code Online (Sandbox Code Playgroud)

有谁知道什么可能导致我的问题?

更新

好的,所以现在在被告知是Ajax搞砸了之后我试图向我的Controller Action发送一个参数,如下所示:

var images = JSON.parse(window.localStorage.getItem("JsonImages"));
var div = document.getElementById('imgOutput');

for (var i = 0; …
Run Code Online (Sandbox Code Playgroud)

ajax asp.net-mvc jquery filecontentresult

4
推荐指数
1
解决办法
2058
查看次数

MVC3 URL.Action没有在img标签中呈现我的图像

在我看来,我有一个图像,如:

    <img width="150" height="150" scr="@Url.Action("GetImage", "Item")" />
Run Code Online (Sandbox Code Playgroud)

我的控制器ItemController有这个方法:

    public FileContentResult GetImage(){
        var model = _itemService.GetItemImage(1);
        if(model != null && model.ImageData != null){
            return File(model.ImageData, model.ImageMimeType);
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

当视图呈现时,我得到了我的图像的以下标记,但没有渲染图像:

    <img width="150" height="150" scr="/MyApp/ItemManagement/GetImage"/>
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器中输入此URL"http:// localhost/MyApp/ItemManagement/GetImage",我会得到图像.我不确定这有什么问题.有人可以指出我的代码有什么问题吗?

提前致谢.杰夫

image filecontentresult asp.net-mvc-3

3
推荐指数
1
解决办法
2233
查看次数

MVC 5 FileContentResult操作结果权限和重定向

我有一个MVC 5应用程序,允许用户下载数据库中存储的文件。我正在使用FileContentResult操作方法来执行此操作。

我可以在整个应用程序中限制对该方法的访问,但是精明的用户可以找出操作URL并将类似这样的内容(localhost:50000 / Home / FileDownload?id = 13)粘贴到他们的浏览器中,并可以通过以下方式下载任何文件只是更改参数。

我想限制用户这样做。仅允许管理员角色和具有特定权限的用户,这些权限只能由数据库调用来确定是否下载文件。

我正在寻找的是,如果用户使用URL下载文件并且没有适当的权限,我想用消息重定向用户。

我想做类似下面的代码或类似的操作,但是出现以下错误:无法将类型'System.Web.Mvc.RedirectToRouteResult'隐式转换为'System.Web.Mvc.FileContentResult'

我知道我不能在这里使用return RedirectToAction(“ Index”),只是在寻找有关如何解决此问题的想法。

    public FileContentResult FileDownload(int id)
    {
        //Check user has file download permission
        bool UserHasPermission = Convert.ToInt32(context.CheckUserHasFileDownloadPermission(id)) == 0 ? false : true;

        if (User.IsInRole("Administrator") || UserHasPermission)
        {
            //declare byte array to get file content from database and string to store file name
            byte[] fileData;
            string fileName;
            //create object of LINQ to SQL class

            //using LINQ expression to get record from database for given id value
            var …
Run Code Online (Sandbox Code Playgroud)

filecontentresult asp.net-mvc-5

2
推荐指数
1
解决办法
3465
查看次数

如何将FileContentResult转换为FileStreamResult?

我有一个从字节数组中获取的FileContentResult,并希望将其转换为FileStreamResult.这可能吗?如果是这样,怎么样?

c# asp.net filestreamresult filecontentresult

1
推荐指数
1
解决办法
2843
查看次数

FileContentResult 在没有特定控制器操作的情况下呈现在视图中

我在从数据库获取的控制器中执行相同的操作,例如具有姓名、年龄、图像(字节 [])的员工。

所以我将信息存储在 ViewBag 中。然后在查看图像的具体代码是:

<img src="@ViewBag.Image" alt="Logo" />
Run Code Online (Sandbox Code Playgroud)

但是当我看到回复的内容时,我有:

<img src="System.something.FileContentResult" alt="Logo" />
Run Code Online (Sandbox Code Playgroud)

我见过很多从控制器中的特定操作获取 FileContentResult 的示例,例如:

(代码仅为示例)

public ActionResult GetEmployeeImage (int id){
    byte[] byteArray = GetImageFromDB(id);
    FileContentData file = new File (byteArray,"image/jpg");
    return file;
}
Run Code Online (Sandbox Code Playgroud)

然后渲染图像:

<img src="@Url.Action("GetEmployeeImage", "Home", new { id = ViewBag.Id })" alt="Em" />
Run Code Online (Sandbox Code Playgroud)

但我不想要那个,因为我已经有了图像。

如何将其渲染到视图抛出 ViewBag?

谢谢!

PD:在视图中渲染图像是相同的,但尚未结束

view filecontentresult asp.net-mvc-3

0
推荐指数
1
解决办法
4352
查看次数