如何在不使用复制到 memory2 的情况下返回导出路径? [关闭]
Posted
技术标签:
【中文标题】如何在不使用复制到 memory2 的情况下返回导出路径? [关闭]【英文标题】:How to return export path without using copy to memory2? [closed] 【发布时间】:2021-11-04 19:03:51 【问题描述】:我正在使用 web API asp.net core 3.1 我需要直接返回导出路径而不复制到内存
那么请问该怎么做呢?
如何返回导出路径而不复制到内存如下
return File(memory2, "text/plain", Path.GetFileName(exportPath));
意思是使用导出路径而不是使用内存2
在文件导出路径上获得结果后我需要的另一个含义
直接返回,不复制到内存
我尝试过的:
public IActionResult Upload()
foreach (var m in mods)
List<InputExcel> inputmodulelist = new List<InputExcel>();
inputmodulelist = inputexcellist.Where(x => x.ModuleName == m).ToList();
var dtimport = DatatableConversion.ToDataTable(inputmodulelist);
DataTable dtexport = new DataTable();
dtexport = _deliveryService.LoadExcelToDataTable(_connectionString, dtimport);
ex.Export(dtexport, m, exportPath);
var memory2 = new MemoryStream();
using (var stream = new FileStream(exportPath, FileMode.Open))
stream.CopyTo(memory2);
memory2.Position = 0;
return File(memory2, "text/plain", Path.GetFileName(exportPath));
【问题讨论】:
A "return File()" 响应从服务器返回 THREE 个内容到您的浏览器:1)文件内容(文件中的字节),2)文件的MIME 类型(例如“text/plain”),3)文件路径(例如,您的浏览器可以将文件的内容写入磁盘)。问:你不喜欢这三件事中的哪一件,并想改变?它现在的工作方式到底有什么问题请澄清。 我需要返回文件才能在客户端下载它 您是否尝试过任何其他重载? docs.microsoft.com/en-us/dotnet/api/… 那么你为什么需要“MemoryStream”呢?只需返回一个 ContentResult():Create text file and download without saving on server in ASP.net Core MVC 2.1 为什么要将文件复制到内存中?为什么不直接将FileStream
提供给File
方法?
【参考方案1】:
从你的描述看来,你是想下载文件而不将文件内容读入内存,对吧?
如果是这样,你可以直接通过System.IO.File.ReadAllBytes()
方法读取文件,代码如下:
[Route("api/[controller]")]
[ApiController]
public class ToDoController : ControllerBase
private readonly ApplicationDbContext _dbContext;
private readonly IWebHostEnvironment environment;
public ToDoController(ApplicationDbContext context, IWebHostEnvironment hostEnvironment)
_dbContext = context;
environment = hostEnvironment;
[HttpGet("download")]
public IActionResult Download()
var exportPath = Path.Combine( environment.WebRootPath, "files","Image1.jpg");
return File(System.IO.File.ReadAllBytes(exportPath), "image/png", System.IO.Path.GetFileName(exportPath));
调用上述动作方法时,会下载图片文件。您可以更改file's MIME type 以下载不同的文件。
【讨论】:
以上是关于如何在不使用复制到 memory2 的情况下返回导出路径? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?
如何在不复制数组的情况下返回 Javascript 中的数组减去单个项目? [复制]
如何在不重新绑定 this 的情况下返回一个带有粗箭头函数的对象? [复制]