我要克隆流对象。这是我的代码:
var fileContent = Request.Files[file];
if (fileContent != null && fileContent.ContentLength > 0) {
byte[] data;
using(Stream inputStream = fileContent.InputStream) {
MemoryStream memoryStream = inputStream as MemoryStream;
if (memoryStream == null) {
memoryStream = new MemoryStream();
inputStream.CopyTo(memoryStream);
}
data = memoryStream.ToArray();
}
}
将内容复制到“ data”变量后,“ fileContent.InputStream
”的长度将为0。如何将内容复制到“数据”字节数组并将内容仍保留在“ fileContent.InputStream
”中?我尝试在使用前以某种方式克隆“ fileContent.InputStream”,但没有进行管理。
这是我的完整代码。内容是我的应用程序的许可证文件,并且我有一个负责文件验证的类。此类可以解密并验证它。它接收一个字节数组作为参数。我想克隆该流以便创建一个字节数组(并对其进行验证),如果有效,我想将“ fileContent.InputStream”保存为许可证文件。这就是为什么我要以某种方式克隆流的原因。
if (Request.Files.Count > 0)
{
foreach (string file in Request.Files)
{
var fileContent = Request.Files[file];
if (fileContent != null && fileContent.ContentLength > 0)
{
byte[] data;
using (Stream inputStream = fileContent.InputStream)
{
var memoryStream = inputStream as MemoryStream;
if (memoryStream == null)
{
memoryStream = new MemoryStream();
inputStream.CopyTo(memoryStream);
}
data = memoryStream.ToArray();
}
var decryptor = new LicenseEncryptorDecryptor();
decryptor.DecryptLicense(data);
if (decryptor.InvalidFile)
{
return Json(new {InvalidFile=true}, JsonRequestBehavior.AllowGet);
}
new FilesManager().SaveFile(fileContent.InputStream, fileContent.FileName, EFileType.License, true);
}
}
}