필드 중 하나에 파일이있는 couchbase에서 객체를 가져옵니다. 파일은 zip로 압축 된 후 base64로 인코딩됩니다.문자열에서 Zip 파일의 압축 해제
어떻게이 문자열을 가져 와서 원래 파일로 다시 압축을 풀 수 있습니까?
그렇다면 ASP.MVC 4를 사용하는 경우 - 어떻게 브라우저로 다운로드 가능한 파일로 다시 보내겠습니까?
원본 파일이 Linux 시스템에서 만들어지고 Windows 시스템 (C#)에서 디코딩됩니다.
필드 중 하나에 파일이있는 couchbase에서 객체를 가져옵니다. 파일은 zip로 압축 된 후 base64로 인코딩됩니다.문자열에서 Zip 파일의 압축 해제
어떻게이 문자열을 가져 와서 원래 파일로 다시 압축을 풀 수 있습니까?
그렇다면 ASP.MVC 4를 사용하는 경우 - 어떻게 브라우저로 다운로드 가능한 파일로 다시 보내겠습니까?
원본 파일이 Linux 시스템에서 만들어지고 Windows 시스템 (C#)에서 디코딩됩니다.
Convert.FromBase64String
을 사용하여 바이트를 얻은 다음 압축을 풀고 Controller.File
을 사용하여 클라이언트에서 파일을 다운로드하도록해야합니다. 압축을 풀려면 ZIP 라이브러리를 사용하여 zip 파일을 열어야합니다. .NET 4.5에 내장 된 ZipArchive
클래스가 작동해야합니다. 또는 다른 라이브러리 (SharpZipLib 및 DotNetZip)를 스트림에서 읽을 수 있습니다.
public ActionResult MyAction()
{
string base64String = // get from Linux system
byte[] zipBytes = Convert.FromBase64String(base64String);
using (var zipStream = new MemoryStream(zipBytes))
using (var zipArchive = new ZipArchive(zipStream))
{
var entry = zipArchive.Entries.Single();
string mimeType = MimeMapping.GetMimeMapping(entry.Name);
using (var decompressedStream = entry.Open())
return File(decompressedStream, mimeType);
}
}
당신은 또한 파일의 MIME 타입을해야합니다, 당신은 당신이 가장 일반적인 유형의 것을 얻을 수 있도록 MimeMapping.GetMimeMapping
를 사용할 수 있습니다.
이전에이 유형의 작업에 성공적으로 SharpZipLib을 사용했습니다.
보기에 매우 가까운 예가 here입니다. MemoryStream을을 생성하고 그것에 문자열을 쓰기
기본적 단계는 다음과 같이해야한다 메모리 스트림의 시작
ZipFile
클래스업데이트
문자열이 파일 (안 전체 ZIP 아카이브)의 압축 된 내용을 포함하는 경우 다음 단순히 압축을 .NET에 GZipStream 클래스를 사용할 수 있습니다 내용. 샘플 here을 찾을 수 있습니다. 그러나 초기 단계는 위와 같습니다 (db로부터 문자열을 가져 와서 메모리 스트림에 쓰고 GZipStream의 입력으로 메모리 스트림을 압축 해제합니다).
감사합니다.하지만 꽤 오래된 것으로 보이며 문서가없는 것 같습니다./ – JohnMighty
@JohnMighty - 아니요, 구식이 아닙니다. 꽤 널리 사용되고 샘플까지, 업데이트 된 답변의 링크를 살펴보십시오. –
.NET 4.5에는 작동 할 ZipArchive 클래스가 포함되어 있다는 것을 깨달았습니다. 그 대답을 사용하도록 업데이트했습니다. 나는 그것을 시도하지 않았기 때문에, 당신이'byte []'또는'Stream'으로 엔트리를 읽는 것을 끝내는 방법을 재 작업해야 할 수도 있습니다. –
완료! 매우 도움이됩니다. – JohnMighty