以下代码有效,但我想知道MemoryStream
创建是否正确关闭.应该如何执行或FileStreamResult
为我处理它?
public FileStreamResult DownloadBudgetedRoleOpportunities(
Guid projectGuid,
IEnumerable<Guid> guidRequiredRoles)
{
var rolebroker = new ProjectRoleBudgetBroker();
var memstream = rolebroker.CreateBudgetedRoleOpportunies(
projectGuid,
guidRequiredRoles);
var fsr = new FileStreamResult ( memstream, "application/csv" )
{
FileDownloadName = "RoleOpportunities.csv"
};
// memstream.Close(); throws exception
return fsr;
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我从任何非必要的行中删除了离开minimun可再现的情况.我期望它能够返回图像,但事实并非如此.据我所知,它返回一个空文件:
public ActionResult Thumbnail(int id) {
var question = GetQuestion(db, id);
var image = new Bitmap(question.ImageFullPath);
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
return new FileStreamResult(stream, "image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)
你能确定这段代码有什么问题吗?在调试器中,我可以看到流的大小增长,所以它似乎获取数据,虽然我无法验证它是正确的数据.我不知道如何调试FileStreamResult本身.
以下内容返回浏览器尝试直接显示内联的PDF.这工作正常.但是,如果我尝试下载该文件,则下载名称不是"myPDF.pdf",而是路由中的ID(myapp/controller/PDFGenerator/ID).是否可以将文件下载名称设置为"myPDF.pdf"?
public FileStreamResult PDFGenerator(int id)
{
MemoryStream ms = GeneratePDF(id);
byte[] file = ms.ToArray();
MemoryStream output = new MemoryStream();
output.Write(file, 0, file.Length);
output.Position = 0;
HttpContext.Response.AddHeader("content-disposition",
"inline; filename=myPDF.pdf");
return File(output, "application/pdf", fileDownloadName="myPDF.pdf");
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用音频HTML5标记流式传输文件.我已经将Controller操作放回FileStream并将其附加到src以获取音频.但是,当我按下默认播放按钮时,内容不会加载到音频标签中,也不会播放.我知道当我直接访问src时控制器正在工作.但是,它在HTML5音频标记中不起作用.
谁能告诉我我失踪了什么?
我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:aäa.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示:
在Chrome中,它按预期工作.这是return语句:
return File(fileStream: stream,
contentType: System.Net.Mime.MediaTypeNames.Application.Octet,
fileDownloadName: myModel.Name + "." + pub.OutputFileType);
Run Code Online (Sandbox Code Playgroud)
我该如何解决IE 9的问题?
.net utf-8 filestreamresult internet-explorer-9 asp.net-mvc-3
在 MVC 中,如果我的查询成功,有没有办法返回 FileStreamResult,但如果不成功,则仅返回 ViewBag 中的错误视图。就像这样....
public FileStreamResult Submit()
{
string retVal;
try
{
DataSet ds = new DataSet();
ds = getDS();
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
ExcelXmlWorkbook book = ExcelXmlWorkbook.DataSetToWorkbook(ds);
string fileName = "results.xml";
book.Export(fileName, ExportFormat.Xml, 0);
FileInfo info = new FileInfo(fileName);
return File(info.OpenRead(), "application/x-msexcel");
}
else
{
retVal = "No Data";
}
}
catch (Exception ex)
{
retVal = ex.Message;
}
ViewBag.Result = retVal;
return View("ViewName");
}
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,但基本上,如果数据提取成功,我想打开一个结果文件...如果没有成功,我想显示该页面,或重定向到另一个页面以向用户显示结果失败了。也欢迎任何关于更好方法的建议。谢谢!
我正在尝试使用操作提供从数据库制作的 txt 文件。动作如下:
public ActionResult ATxt()
{
var articulos = _articulosService.ObteTotsArticles();
return File(CatalegATxt.ATxt(articulos), "text/plain");
}
Run Code Online (Sandbox Code Playgroud)
CatalegATxt 类是:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using WebDibaelsaMVC.DTOs.Busqueda;
namespace WebDibaelsaMVC.TxtLib
{
public static class CatalegATxt
{
public static Stream ATxt(IEnumerable<ArticuloBusquedaDTO> articles)
{
var stream = new MemoryStream();
var streamWriter = new StreamWriter(stream, Encoding.UTF8);
foreach (ArticuloBusquedaDTO article in articles)
{
streamWriter.WriteLine(article.ToStringFix());
}
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
public static string ToStringFix(this ArticuloBusquedaDTO article)
{
string result = "";
result += article.CodigoArticulo.PadRight(10, ' …
Run Code Online (Sandbox Code Playgroud) transformer.transform(new DOMSource(doc),new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
Run Code Online (Sandbox Code Playgroud)
我正在使用它来生成控制台的输出.我想将输出存储到刺痛中.我不知道该怎么做.谁能帮我?:(
提前致谢
我在我的 asp.net 核心 api 控制器中有
return new FileStreamResult(excel, "application/ms-excel")
{
FileDownloadName = filename
};
Run Code Online (Sandbox Code Playgroud)
我正在做一个 ajax 请求来获取这个文件
var response = axios.get(
`/endpoint`, {
responseType: 'blob'
});
Run Code Online (Sandbox Code Playgroud)
然后我使用了一个名为download的库,它接受 3 个参数,其中一个参数是“文件名”,我想知道是否可以以某种方式获取来自服务器的文件名。
download(response.data,"test.xlsx", content);
Run Code Online (Sandbox Code Playgroud)
科尔斯
services.AddCors(options => options.AddPolicy("Cors",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Run Code Online (Sandbox Code Playgroud) 我正在针对返回 pdf 文件的控制器编写测试用例。
控制器代码:
public FileStreamResult GeneratePdfReport(string context)
{
byte[] pdfReportContents = _helpPageBusinessService.GetHelpPagesAsPdf();
Stream stream = new MemoryStream(pdfReportContents);
HttpContext.Response.AddHeader("content-disposition", "attachment; filename=GSFA_Help_Pages_Printout.pdf");
return new FileStreamResult(stream, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)
单元测试代码:
[TestMethod]
public void GeneratePdf()
{
var controller = new HelpController(_helpPageBusinessServiceReportServices, Logger);
try
{
var result = controller.GeneratePdfReport("Work_Request_Section");
Assert.IsNotNull(result);
Assert.IsNotNull(result.FileStream);
}
finally
{
controller.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
这个单元测试用例不起作用,它总是失败,因为 HttpContext 为空。
有没有人知道如何针对这种类型的控制器编写单元测试用例?
非常感激 !
杰弗里
filestreamresult ×10
asp.net-mvc ×5
.net ×2
utf-8 ×2
ajax ×1
asp.net-core ×1
axios ×1
c# ×1
html5 ×1
java ×1
javascript ×1
memorystream ×1
stream ×1
text-files ×1
unit-testing ×1