将 byte[] 导出为损坏的 .zip
Exporting byte[] results to corrupted .zip
我正在尝试使用 .NET 2.0 将 CLR 集成到 MS SQL Server 2008 中。我调用了一个 API,我应该会收到一个 .zip 作为响应。我将响应存储到 Stream 中,我想将此文件导出到物理 .zip 文件。
我尝试使用 C# 和 SQL (BCB OR OLE) 导出文件,但都导致文件损坏。所以,我认为我在制作流时做错了。
C#代码如下:
private static byte[] GetStreamFileResult(Cookie loginCookie, Guid fileGuid, String baseUri)
{
byte[] output = null;
//String result = null;
string url = "some url"
CookieContainer cookies = new CookieContainer();
cookies.Add(new Uri(url), loginCookie);
WebRequest request = WebRequest.Create(url);
(request as HttpWebRequest).CookieContainer = cookies;
WebResponse response = request.GetResponse();
HttpWebResponse resp = response as HttpWebResponse;
Stream dataStream = response.GetResponseStream();
using (MemoryStream ms = new MemoryStream())
{
CopyStream(dataStream, ms);
output = ms.ToArray();
}
dataStream.Close();
response.Close();
return output;
}
导出 zip 的 C# 代码如下:
File.WriteAllBytes("C:\folder\t.zip", stream); // Requires System.IO
从流到流的复制:
public static void CopyStream(Stream input, Stream output)
{
if (input != null)
{
using (StreamReader reader = new StreamReader(input))
using (StreamWriter writer = new StreamWriter(output))
{
writer.Write(reader.ReadToEnd());
}
}
}
你的 CopyStream
坏了。你需要谈论二进制。您当前正在将二进制 zip 数据视为文本:
byte[] buffer = new byte[2048];
int bytesRead;
while((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) {
output.Write(buffer, 0, bytesRead);
}
我正在尝试使用 .NET 2.0 将 CLR 集成到 MS SQL Server 2008 中。我调用了一个 API,我应该会收到一个 .zip 作为响应。我将响应存储到 Stream 中,我想将此文件导出到物理 .zip 文件。 我尝试使用 C# 和 SQL (BCB OR OLE) 导出文件,但都导致文件损坏。所以,我认为我在制作流时做错了。
C#代码如下:
private static byte[] GetStreamFileResult(Cookie loginCookie, Guid fileGuid, String baseUri)
{
byte[] output = null;
//String result = null;
string url = "some url"
CookieContainer cookies = new CookieContainer();
cookies.Add(new Uri(url), loginCookie);
WebRequest request = WebRequest.Create(url);
(request as HttpWebRequest).CookieContainer = cookies;
WebResponse response = request.GetResponse();
HttpWebResponse resp = response as HttpWebResponse;
Stream dataStream = response.GetResponseStream();
using (MemoryStream ms = new MemoryStream())
{
CopyStream(dataStream, ms);
output = ms.ToArray();
}
dataStream.Close();
response.Close();
return output;
}
导出 zip 的 C# 代码如下:
File.WriteAllBytes("C:\folder\t.zip", stream); // Requires System.IO
从流到流的复制:
public static void CopyStream(Stream input, Stream output)
{
if (input != null)
{
using (StreamReader reader = new StreamReader(input))
using (StreamWriter writer = new StreamWriter(output))
{
writer.Write(reader.ReadToEnd());
}
}
}
你的 CopyStream
坏了。你需要谈论二进制。您当前正在将二进制 zip 数据视为文本:
byte[] buffer = new byte[2048];
int bytesRead;
while((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) {
output.Write(buffer, 0, bytesRead);
}