我正在使用ASP.NET MVC的新的WebAPI的网络服务,将成为了二进制文件,主要是.cab和.exe文件.
以下控制器方法似乎有效,这意味着它返回一个文件,但它将内容类型设置为application/json:
public HttpResponseMessage<Stream> Post(string version, string environment, string filetype)
{
var path = @"C:\Temp\test.exe";
var stream = new FileStream(path, FileMode.Open);
return new HttpResponseMessage<Stream>(stream, new MediaTypeHeaderValue("application/octet-stream"));
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
我想在下载后立即删除文件,我该怎么办?我试图子类化FilePathResult并覆盖WriteFile我删除文件后的方法
HttpResponseBase.TransmitFile
Run Code Online (Sandbox Code Playgroud)
被调用,但这会挂起应用程序.
用户下载后可以安全删除文件吗?
我是使用ASP.NET MVC 4和Web Api的新手.
我想允许用户下载一个文件,这个文件我将在服务器端创建.为了创建文件,我设法获得以下代码
[ActionName("Export")]
public HttpResponseMessage PostExportData(SomeModel model)
{
string csv = _service.GetData(model);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StringContent(csv);
//a text file is actually an octet-stream (pdf, etc)
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
//we used attachment to force download
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "file.csv";
return result;
}
Run Code Online (Sandbox Code Playgroud)
如何使用JQUERY来调用这个WEB API方法?
但是我不知道如何使用jquery调用这个web api并让它返回一个文件,下载任何文件时通常会得到"另存为/打开"选项.
有人可以帮助我并指导我如何拨打电话并下载文件.谢谢.
我正在尝试动态创建 csv 文件并将流输出到浏览器。
这是我的 api 端点:
[System.Web.Http.HttpGet]
[System.Web.Http.Route("export-to-csv")]
public FileStreamResult ExportDeposits([FromUri(Name = "")]DepositSearchParamsVM depositSearchParamsVM)
{
if (depositSearchParamsVM == null)
{
depositSearchParamsVM = new DepositSearchParamsVM();
}
var records = _DepositsService.SearchDeposits(depositSearchParamsVM);
var result = _DepositsService.WriteCsvToMemory(records);
var memoryStream = new MemoryStream(result);
return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
}
Run Code Online (Sandbox Code Playgroud)
这是我的服务方法:
public byte[] WriteCsvToMemory(IEnumerable<DepositSummaryVM> records)
{
using (var stream = new MemoryStream())
using (var reader = new StreamReader(stream))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer))
{
csv.WriteRecords(records); …Run Code Online (Sandbox Code Playgroud) 我创建了一个基于MVC 5的WebAPI控制器 - 为我们的客户提供不同的文件.访问文件的工具也是自编写的 - 基于.NET HttpClient - 但这是另一个故事.
在下载控制器的第一个版本,我使用的生成机制来提供像文件这样
但是这个机制在我的iis上崩溃了4GB以上的文件.
所以我终于来到了这段代码:
public class DownloadController : ApiController
{
public async Task Get(long id)
{
string fullFilePath = GetFilePathById(id);
string returnFileName = fullFilePath.Split('\\').Last();
FileInfo path = new FileInfo(fullFilePath);
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("Content-Length", path.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + returnFileName);
HttpContext.Current.Response.Flush();
try
{
byte[] buffer = new byte[4096];
using (FileStream fs = path.OpenRead())
{
using (BufferedStream bs = new BufferedStream(fs, 524288))
{
int count = 0;
while ((count = bs.Read(buffer, 0, buffer.Length)) …Run Code Online (Sandbox Code Playgroud) 我试图用这个和这个得到一个HTML文件作为输出,但得到error 500
我的应用程序的目标是基于api请求,服务器将生成请求的输出作为html文件,并将其发送到用户请求.
使用的代码是:
using Microsoft.AspNetCore.Mvc; // for Controller, [Route], [HttpPost], [FromBody], JsonResult and Json
using System.IO; // for MemoryStream
using System.Net.Http; // for HttpResponseMessage
using System.Net; // for HttpStatusCode
using System.Net.Http.Headers; // for MediaTypeHeaderValue
namespace server{
[Route("api/[controller]")]
public class FileController : Controller{
[HttpGet]
public HttpResponseMessage Get()
{
string r = @"
Hello There
";
var stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(r);
writer.Flush();
stream.Position = 0;
// processing the stream.
byte[] …Run Code Online (Sandbox Code Playgroud) 我现在遇到了一个非常奇怪的问题......我正在尝试从我的 web api 返回一个文件,但即使流正在工作并且代码中没有抛出任何错误,我也收到了 HTTP 错误 500。
var doc = DocX.Load(...);
// ...
var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();
return File(ms, "application/octet-stream");
Run Code Online (Sandbox Code Playgroud)
流的大小变为 22kb,但是当我导航到 api 的 url 时,我得到一个 HTTP 500,为什么?
谢谢你。
c# ×4
asp.net-mvc ×2
.net ×1
.net-core ×1
asp.net ×1
asp.net-core ×1
csv ×1
csvhelper ×1
jquery ×1
memorystream ×1