首页 文章

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

提问于
浏览
-1

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

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

我的代码:

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

Directory.CreateDirectory(folderToZip);

string directoryPath = ConfigurationManager.AppSettings [“DirectoryPath”]; string combinedPath = Path.Combine(directoryPath,id);

DirectoryInfo di = new DirectoryInfo(combinedPath); if(di.Exists){//提供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 回答

  • 1

    在你的控制器中:

    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:解决方案已存在的文件

相关问题