- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个操作将 Excel 作为自定义 FileResult 返回。我的解决方案基于 ClosedXml库(内部使用 OpenXml)。我的 XlsxResult 类使用服务器上的只读 .xlsx 文件作为模板。然后,它将模板传递到内存流中,并使用 ClosedXml 对其进行操作和保存。最后,内存流被写入响应。
这在 Cassini 和 IIS Express 上都可以正常工作,但在部署在 azure 上时会失败,并且没有任何错误。我遇到的唯一影响是发送到服务器的请求永远不会得到任何响应。我仍在等待 60 分钟左右的事情发生......
我的行动:
[OutputCache(Location= System.Web.UI.OutputCacheLocation.None, Duration=0)]
public FileResult Export(int year, int month, int day) {
var date = new DateTime(year, month, day);
var filename = string.Format("MyTemplate_{0:yyyyMMdd}.xlsx", date);
//return new FilePathResult("~/Content/templates/MyTemplate.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
var result = new XlsxExportTemplatedResult("MyTemplate.xlsx", filename, (workbook) => {
var ws = workbook.Worksheets.Worksheet("My Export Sheet");
ws.Cell("B3").Value = date;
// Using a OpenXML's predefined formats (15 stands for date)
ws.Cell("B3").Style.NumberFormat.NumberFormatId = 15;
ws.Columns().AdjustToContents(); // You can also specify the range of columns to adjust, e.g.
return workbook;
});
return result;
}
我的文件结果
public class XlsxExportTemplatedResult : FileResult
{
// default buffer size as defined in BufferedStream type
private const int BufferSize = 0x1000;
public static readonly string TEMPLATE_FOLDER_LOCATION = @"~\Content\templates";
public XlsxExportTemplatedResult(string templateName, string fileDownloadName, Func<XLWorkbook, XLWorkbook> generate)
: base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
this.TempalteName = templateName;
this.FileDownloadName = fileDownloadName;
this.Generate = generate;
}
public string TempalteName { get; protected set; }
public Func<XLWorkbook, XLWorkbook> Generate { get; protected set; }
protected string templatePath = string.Empty;
public override void ExecuteResult(ControllerContext context) {
templatePath = context.HttpContext.Server.MapPath(System.IO.Path.Combine(TEMPLATE_FOLDER_LOCATION, this.TempalteName));
base.ExecuteResult(context);
}
//http://msdn.microsoft.com/en-us/library/office/ee945362(v=office.11).aspx
protected override void WriteFile(System.Web.HttpResponseBase response) {
FileStream fileStream = new FileStream(templatePath, FileMode.Open, FileAccess.Read);
using (MemoryStream memoryStream = new MemoryStream()) {
CopyStream(fileStream, memoryStream);
using (var workbook = new XLWorkbook(memoryStream)) {
Generate(workbook);
workbook.Save();
}
// At this point, the memory stream contains the modified document.
// grab chunks of data and write to the output stream
Stream outputStream = response.OutputStream;
byte[] buffer = new byte[BufferSize];
while (true) {
int bytesRead = memoryStream.Read(buffer, 0, BufferSize);
if (bytesRead == 0) {
// no more data
break;
}
outputStream.Write(buffer, 0, bytesRead);
}
}
fileStream.Dispose();
}
static private void CopyStream(Stream source, Stream destination) {
byte[] buffer = new byte[BufferSize];
int bytesRead;
do {
bytesRead = source.Read(buffer, 0, buffer.Length);
destination.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);
}
}
那么我是否错过了一些东西(显然我错过了)。
请注意:
坦克。
UPDATE:After I logged extensively in my code the execution hangs with no error at the ClosedXml "Save" method call. But still no error. Abstract from the WADLogsTable:
- Opening template file from path:E:\sitesroot\0\Content\templates\MyTemplate.xlsx
- Opened template from path:E:\sitesroot\0\Content\templates\MyTemplate.xlsx just
- copied template to editable memory stream. Bytes copied: 15955,Position: 15955
- modified the excel document in memory.
- here it hangs when a it calls to workbook.Save(); This is a ClosedXml method call.
最佳答案
我遇到了和你完全相同的错误情况。我无法针对您的具体情况提供解决方案,并且我知道您改变了方向,但是在经历了您所面临的相同令人沮丧的步骤之后,我想为您(或其他人)的答案“铺平道路” .
进入 Visual Studio 中的包管理器控制台并使用 MVC 功能(路由)安装 Elmah:
Install-Package elmah.MVC
现在,在您的根 web.config 中,更新您的 Elmah 条目。它可能位于文件末尾,如下所示:
<elmah></elmah>
更新那个坏男孩以允许远程访问并设置您的日志路径:
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/app_data/elmah" />
</elmah>
现在,将其推送到 Azure。
最后,访问您的网站,强制出现错误,然后导航至 http://your-site-here.azurewebsites.net/elmah您将看到错误的确切原因。
Elmah 太棒了。
胆怯的坦白:我的错误不在第三方代码中,结果是在我的连接字符串中,我没有为其设置MultipleActiveResultsSets
为真。我必须做的另一个修复是在调用 ToList() 到该库上的一个内部方法之后将我的实体传递给该库,将其保留为 IQueryable 中断该方法。
关于azure - Azure 上的自定义 FileResult : Browser Waits forever,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094389/
有时我在调用Web服务以获取凭证且Web服务为KO时出现错误。我需要重定向到其他操作:我需要执行以下操作: public virtual FileResult Ticket(int operati
我正在尝试通过 Controller ActionResult 返回大文件,并实现了如下所示的自定义 FileResult 类。 public class StreamedFileResult
我的 View 中有一个列表,其中包含一个 ActionLink 按钮“下载”,我希望他们在单击该链接时下载一个文件。该文件位于我项目的 map 中。 查看: Your active lin
我正在使用 ASP.NET Core 2.1 ActionResult 从 Controller 返回一个文件: [HttpGet] public ActionResult Download() {
我正在研究 ASP.NET Core API。 API 是数据库驱动的。 我将图像存储在数据库中,我的 ArtistImage.cs 实体如下所示: ArtistImage.cs public cla
是否可以在 C# 中从 FileResult 获取 byte[]? 最佳答案 FileResult是一个 abstract 类,所以它不会是底层 instance 类型 - 假设正确的 overloa
我有一个返回 FileResult (这是一个 png 图像)的操作。我非常希望浏览器能够缓存结果,因为对于给定的请求 uri,它不会改变。 我使用路由使 uri 看起来像这样 - http://lo
我需要在单击某些文本时下载特定文件。我希望典型的“另存为..”对话框可以选择保存文件的位置,但它没有出现。请求和响应都正常。 请求/响应 header GET /Survey/GetSurveyFil
我正在编写 url 重定向器。现在我正在为此苦苦挣扎: 假设我有这个方法: public FileResult ImageRedirect(string url) 然后我将此字符串作为输入传递:htt
在我的 Controller 中,我有一个 ActionResult 它返回一个文件。 [HttpPost] public ActionResult ExportCSV(ReportResultVie
我有一个返回文件结果(返回 PDF 文件)的 MVC 方法,我需要在 src 标签中使用相同的 url 并在浏览器中显示它。 例如我的示例代码如下: public FileResult GetAtta
这可能很简单,但这里是: 我正在我的 MVC3 应用程序中实现一个 excel 可下载报告。我过去使用过这种方法并且效果很好,但是在这种情况下,报表中可能不存在销售数据。这是我的代码: 我在 Repo
出于模拟目的,我想将 FileResult 输出到磁盘上的实际文件。 有没有办法获取 FileResult 的内容并将其写入文件?FileResult 上公开的属性有点小。 我正在寻找类似的东西: v
我有一个返回 FileResult 的 MVC C# Controller [HttpPost] public FileResult FinaliseQuote(string quot
我有一个操作将 Excel 作为自定义 FileResult 返回。我的解决方案基于 ClosedXml库(内部使用 OpenXml)。我的 XlsxResult 类使用服务器上的只读 .xlsx 文
我有一个操作将 Excel 作为自定义 FileResult 返回。我的解决方案基于 ClosedXml库(内部使用 OpenXml)。我的 XlsxResult 类使用服务器上的只读 .xlsx 文
我一直在研究我的 ASP.NET MVC 应用程序如何记录不成功/不完整的下载。我有一个 Controller 处理当前返回 FileResult 的文件请求。我需要记录的是 IP 地址、文件名和下载
使用 AWSSDK.S3 nuget 包,我试图返回一个从 S3 存储桶中检索到的文件。我的出发点是基于此 SO answer 中给出的示例. 示例 Controller 代码: public Fil
我正在尝试使用 jQuery 动态更改图像的来源。这是我们之前所做的一个示例: $('#resultsDiv').on('mouseover', '.cardImage', function() {
我有一个按钮,可以通过在 Controller 中运行保存函数来保存表单。该 Controller 的形式如下: [HttpPost] public ActionResult Save(ViewMod
我是一名优秀的程序员,十分优秀!