zip file 压缩文件
zip File 压缩文件
2023-09-27 14:23:56 时间
更新 2019-03-26
从 upload file stream 直接做成 zip file
[HttpPost("upload")] public async Task<ActionResult<string>> Upload([FromForm] UploadFileData data) { using (var fileStream = data.file.OpenReadStream()) { using (var zip = ZipFile.Open($@"C:\keatkeat\my-projects\aspnetcore-projects\asp.net core 2.2\zip-file\Project\dada.zip", ZipArchiveMode.Create)) { var entry = zip.CreateEntry("abc.pdf"); using (var entryStream = entry.Open()) { await fileStream.CopyToAsync(entryStream); } } } return Ok(); }
有时候我们希望 upload 文件后自动压缩, 可以节省空间.
可以使用微软提供的压缩代码
Install-Package System.IO.Compression.ZipFile -Version 4.3.0
refer :
http://www.cnblogs.com/haogj/archive/2012/11/17/2774733.html
http://www.cnblogs.com/skyivben/archive/2012/03/09/2388482.html
string root = AppDomain.CurrentDomain.BaseDirectory; string[] inputFiles = new string[] { root + "angular1.min.js", root + "Capture.PNG" }; string outputFile = root + "myZip4.zip"; FileInfo file = new FileInfo(outputFile); if (file.Exists) throw new Exception("error"); bool notExist = inputFiles.Any(f => { FileInfo fileInfo = new FileInfo(f); return !fileInfo.Exists; }); if (notExist) throw new Exception("error"); using (var zip = ZipFile.Open(outputFile, ZipArchiveMode.Create)) { foreach (var inputFile in inputFiles) { string fileName = Path.GetFileName(inputFile); zip.CreateEntryFromFile(inputFile, fileName); } } //ZipFile.CreateFromDirectory(root + "myfolder", root + "abc.zip");
可以在上传文件保持后进行操作
[ODataRoute("uploadFile")] public async Task<IHttpActionResult> uploadFile() { if (!Request.Content.IsMimeMultipartContent()) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); string root = AppDomain.CurrentDomain.BaseDirectory + "UploadedFiles"; var provider = new Helper.MyMultipartFormDataStreamProvider(root); await Request.Content.ReadAsMultipartAsync(provider); string localFilePath = provider.FileData[0].LocalFileName; //do zip..., delete original file, if multiple then loop string fileName = Path.GetFileNameWithoutExtension(localFilePath) + ".zip"; return Ok(fileName); }
另一种情况可以是在下载的时候选择性压缩
前端可以使用 <a download href= "/download?path=a.jpg,b.jpg" >
href 可以通过 mvvm 工具做成动态.
尽量不要使用 Blob 之类的,不然依赖太多.
后台通过 path params zip 了文件使用 return FIleResult 返回前端就可以了.
如果文件不大的话,可以使用缓存保存 zip stream 然后返回 stream
string root = AppDomain.CurrentDomain.BaseDirectory; var memoryStream = new MemoryStream(); using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntryFromFile(root + "angular.min.js", "angular.min.js"); } memoryStream.Seek(0, SeekOrigin.Begin); string filepath = AppDomain.CurrentDomain.BaseDirectory + "angular.min.zip"; string contentType = MimeMapping.GetMimeMapping(filepath); return File(memoryStream, contentType, "angular.min.zip");
注意
1.memoryStream 不要用 using , FileResult 会负责处理.
2.new ZipArchive 第3个参数 leaveOpen 要 true, 这样 ZipArchive displose 时, memoryStream 还可以使用.
3.memoryStream.Seek 必须把 posotion 调回 0 哦.
相关文章
- python中的拉链函数:zip()、zip(*)
- Java处理ZIP文件的解决方案——Zip4J(不解压直接通过InputStream形式读取其中的文件,解决中文乱码)
- zip解压破解
- ERROR: Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
- 解决Android Studio出现Failed to open zip file. Gradle's dependency cache may be corrupt的问题
- Python面试题之Python中的lambda map filter reduce zip
- ubuntu 解压zip 文件乱码
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.3 ZIP文档
- [Java]Maven构建时报错: "Error:java: 读取E:XXXXX..jar时出错; error in opening zip file"
- Linux 下 zip 文件解压乱码如何解决
- zip命令常用选项
- zip
- Windows下安装MySQL压缩zip包
- RxJava zip操作符在Android中的实际使用场景
- 我的Android进阶之旅------>Android编译错误java.util.zip.ZipException: duplicate entry的解决方法