本文已参与「新人创作礼」活动,一起开启掘金创作之路。
需求:根据华为云桶的文件下载地址,展示出目标ZIP文件内的所有文件信息
/// <summary>
/// 获取目标ZIP文件内的所有文件信息
/// </summary>
/// <param name="stream">文件流</param>
/// <param name="fileList">返回的结果集</param>
/// <returns></returns>
private IList<fileInfo> GetFileInfoForZip(Stream stream,out IList<fileInfo> fileList)
{
//声明返回的结果集
fileList = new List<fileInfo>();
stream.Position = 0;
var factory = ArchiveFactory.Open(stream);
foreach (var item in factory.Entries)
{
fileInfo fil = new fileInfo();
var memoryStream = new MemoryStream();
var entryStream = item.OpenEntryStream();
//entryStream.Position = 0;
if (entryStream != null)
{
entryStream.CopyTo(memoryStream);
entryStream.Dispose();
}
fil.Name = item.Key;
fil.size = item.Size.ToString();
fil.Time = item.LastModifiedTime.ToString();
fileList.Add(fil);
}
return fileList;
}
/// <summary>
/// 流转换方法----直接转Stream流会出现 System.NotSupportedException:"此流不支持查找操作" 错误
/// </summary>
/// <param name="instream"></param>
/// <returns></returns>
MemoryStream StreamToMemoryStream(Stream instream)
{
MemoryStream outstream = new MemoryStream();
const int bufferLength = 4096;
byte[] bl = new byte[bufferLength];
int count = 0;
while ((count = instream.Read(bl, 0, bufferLength)) > 0)
{
outstream.Write(bl, 0, count);
}
return outstream;
}
/// <summary>
/// 用到的文件信息类
/// </summary>
public class fileInfo
{
/// <summary>
/// 文件名
/// </summary>
public string Name;
/// <summary>
/// 文件大小
/// </summary>
public string size;
/// <summary>
/// 创建时间
/// </summary>
public string Time;
}
//按钮的触发事件
protected void btn_Text_Click(object sender, EventArgs e)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
Stream rs = response.GetResponseStream();
var ms = StreamToMemoryStream(rs);//rs.Length 此流不支持查找,先转为MemoryStream
IList<fileInfo> fileList = new List<fileInfo>();
GetFileInfoForZip(ms, out fileList);
}
}
**
需求:根据本地地址获取目标Zip压缩包中的文件信息
**
/// <summary>
/// 根据附件地址获取附件中文件的信息
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileList"></param>
/// <returns></returns>
public IList<fileInfo> getZipInfo(string filePath, out IList<fileInfo> fileList)
{
//根据ItemId和itemFileId查询对应的文件信息(默认智能查询到一件,itemFileId为主键理应不会重复)
fileList = new List<fileInfo>();
//判断是否查询到数据
var factory = ArchiveFactory.Open(filePath);
foreach (var fileInfo in factory.Entries)
{
fileInfo fil = new fileInfo();
fil.Name = fileInfo.Key;
fil.size = fileInfo.Size.ToString();
fil.Time = fileInfo.LastModifiedTime.ToString();
fileList.Add(fil);
}
return fileList;
}
/// <summary>
/// 用到的文件信息类
/// </summary>
public class fileInfo
{
/// <summary>
/// 文件名
/// </summary>
public string Name;
/// <summary>
/// 文件大小
/// </summary>
public string size;
/// <summary>
/// 创建时间
/// </summary>
public string Time;
}