当前位置: 首页 > 知识库问答 >
问题:

如何从Web API 2 HttpGet发送zip文件

方轩昂
2023-03-14

我试图弄清楚如何从给定的文件夹路径创建新的zip文件,并将其发送回发件人。

需要的是,该文件将在请求它的发件人处下载。我已经看到了很多答案,但没有一个能帮我找到准确的答案。

我的代码:

Guid folderGuid=Guid。NewGuid();string folderToZip=ConfigurationManager。AppSettings[“folderToZip”]folderGuid。ToString();

目录CreateDirectory(folderToZip);

string DirectoryPath=ConfigurationManager。应用设置["DirectoryPath"];字符串组合路径=路径。组合(DirectoryPath, id);

DirectoryInfo di=new DirectoryInfo(组合路径); if(di. Exist){//提供zip文件的路径和名称以创建字符串zipFile=folderToZip"\"folderGuid". zip";

//call the ZipFile.CreateFromDirectory() method
ZipFile.CreateFromDirectory(combinedPath, zipFile, CompressionLevel.Fastest, true);

var result = new HttpResponseMessage(HttpStatusCode.OK);
using (ZipArchive zip = ZipFile.Open(zipFile, ZipArchiveMode.Read))
{
    zip.CreateEntryFromFile(folderFiles, "file.zip");
}

var stream = new FileStream(zipFile, FileMode.Open);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = "file.zip"
};
log.Debug("END ExportFiles()");
return ResponseMessage(result);

共有1个答案

芮博厚
2023-03-14

控制器中:

using System.IO.Compression.FileSystem; // Reference System.IO.Compression.FileSystem.dll

[HttpGet]
[Route("api/myzipfile"]
public dynamic DownloadZip([FromUri]string dirPath)
{
if(!System.IO.Directory.Exists(dirPath))
   return this.NotFound();

    var tempFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid()); // might want to clean this up if there are a lot of downloads
    ZipFile.CreateFromDirectory(dirPath, tempFile);
    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new StreamContent(new FileStream(tempFile, FileMode.Open, FileAccess.Read));
    response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = fileName;
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");

  return response;
}

UPD:解决文件已经存在的问题

 类似资料:
  • 问题内容: 我想知道如何将zip文件发送到WebApi控制器,反之亦然。问题是我的WebApi使用json传输数据。一个zip文件不可序列化,或者是流。字符串将可序列化。但是除了将zip转换为字符串并发送字符串之外,还必须有其他解决方案。这听起来是错误的。 任何想法如何做到这一点? 问题答案: 如果您的API方法期望使用,则可以从中提取流: 当使用张贴HTTP表单时,这对我有用。

  • 问题内容: 我有一个Flask服务器,它从数据库中获取几个不同文件的二进制数据,并将它们放入python’zipfile’对象中。我想使用flask的“ send_file”方法将生成的zip文件与我的代码一起发送。 我最初能够通过使用BytesIO(bin)作为send_file的第一个参数来成功发送非zip文件,但是由于某些原因,我无法对生成的zip文件执行相同的操作。它给出了错误: ‘Zip

  • 我的服务器中有一个zip文件,我想为用户创建一个下载按钮,下面是我的代码: 下面是我的JS代码: 当我单击“a”元素(downloadLink)时,我可以下载zip文件,但当我尝试打开它时,我会收到一个错误,上面写着: 错误:不是存档警告:标题错误 从服务器的zip文件是100%罚款,我可以打开它没有任何问题,问题是当我从我的网站下载它,所以我认为有一些我是理所当然的。任何帮助都很感激,谢谢。

  • 问题内容: 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)中获取文件内容。我唯一拥有的是ZIP的。大多数示例说明如何使用以下语句获取内容: 但是正如我所说,我的本地计算机上没有ZIP文件,也不想下载它。是够看了? UPD: 这是我的方法: 问题答案: 好吧,我已经做到了: 它可以帮助我阅读ZIP的内容而无需写入另一个文件。

  • 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)获取文件内容。我唯一拥有的是ZIP的InputStream。大多数示例显示了如何使用此语句获取内容: 但正如我所说,我的本地机器上没有ZIP文件,我不想下载它。输入流是否足以读取? UPD:我就是这样做的:

  • 问题内容: 因此,大约一个月前,我问了一个有关超级代理和发送文件的问题,但没有任何反应。我仍然喜欢找出使用超级代理的方法。 我可以使用纯Ajax发送文件: 但是,当我在超级代理中尝试相同的操作时,没有任何效果: 谁能告诉我发生了什么事。 问题答案: 这应该工作。