Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何克隆HttpPostedFile_C#_Asp.net - Fatal编程技术网

C# 如何克隆HttpPostedFile

C# 如何克隆HttpPostedFile,c#,asp.net,C#,Asp.net,我有一个应用程序,允许用户上传一个文件,该文件在保存前用Symantec protection engine扫描。我遇到的问题是,使用保护引擎扫描文件后,它们有0个字节。我正试图想出解决这个问题的办法 我尝试过这里提到的克隆解决方案:,但我上传的文件并非都是可序列化的。我还尝试在扫描引擎类中将流重置为0,然后将其传回保存 我与Symantec联系过,他们说为该应用程序编写的自定义连接类看起来是正确的,并且保护引擎没有抛出错误 我对这个问题的任何解决办法都持开放态度 以下是上载文件的代码: pri

我有一个应用程序,允许用户上传一个文件,该文件在保存前用Symantec protection engine扫描。我遇到的问题是,使用保护引擎扫描文件后,它们有0个字节。我正试图想出解决这个问题的办法

我尝试过这里提到的克隆解决方案:,但我上传的文件并非都是可序列化的。我还尝试在扫描引擎类中将流重置为0,然后将其传回保存

我与Symantec联系过,他们说为该应用程序编写的自定义连接类看起来是正确的,并且保护引擎没有抛出错误

我对这个问题的任何解决办法都持开放态度

以下是上载文件的代码:

private void UploadFiles()
{
    System.Web.HttpPostedFile objFile;
    string strFilename = string.Empty;
    if (FileUpload1.HasFile)
    {

        objFile = FileUpload1.PostedFile;
        strFilename = FileUpload1.FileName;


        if (GetUploadedFilesCount() < 8)
        {
            if (IsDuplicateFileName(Path.GetFileName(objFile.FileName)) == false)
            {
                if (ValidateUploadedFiles(FileUpload1.PostedFile) == true)
                {
                    //stores full path of folder
                    string strFileLocation = CreateFolder();

                    //Just to know the uploading folder
                    mTransactionInfo.FileLocation = strFileLocation.Split('\\').Last();
                    if (ScanUploadedFile(objFile) == true)
                    {
                            SaveFile(objFile, strFileLocation);
                    }
                    else
                    {
                        lblErrorMessage.Visible = true;
                        if (mFileStatus != null)
                        { lblErrorMessage.Text = mFileStatus.ToString(); }
private void UploadFiles()
{
System.Web.HttpPostedFile objFile;
string strFilename=string.Empty;
if(FileUpload1.HasFile)
{
objFile=FileUpload1.PostedFile;
strFilename=FileUpload1.FileName;
如果(GetUploadedFilesCount()<8)
{
if(IsDuplicateFileName(Path.GetFileName(objFile.FileName))==false)
{
if(validateUploadedFile(FileUpload1.PostedFile)==true)
{
//存储文件夹的完整路径
字符串strFileLocation=CreateFolder();
//只是想知道上传文件夹
mTransactionInfo.FileLocation=strFileLocation.Split('\\').Last();
if(扫描上载文件(objFile)==true)
{
保存文件(objFile,strFileLocation);
}
其他的
{
lblErrorMessage.Visible=true;
if(mFileStatus!=null)
{lblErrorMessage.Text=mFileStatus.ToString();}

如果有人需要,我可以提供连接类代码,但它相当大。

在将文件流传递到扫描引擎之前,您可以复制文件流

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

// pass the scanning engine
StreamScanRequest scan = requestManagerObj.CreateStreamScanRequest(Policy.DEFAULT);
//...
更新 要复制流,可以执行以下操作:

MemoryStream ms = new MemoryStream();
file.InputStream.CopyTo(ms);
file.InputStream.Position = ms.Position = 0;

对于此解决方案,当保护引擎确定文件是干净的时,我会保存文件数据?或者您是说将文件数据数组传递给引擎?据我所知,您可以使用
CreateStreamScanRequest()
传递给引擎。该扫描的结果。Finish()我相信会给您一个扫描结果,而不是一个文件,因此您仍然可以将文件字节的副本保存到磁盘或云API(即Amazon S3或Rackspace云文件等)。重点是您想复制一份
HttpPostedFile.InputStream
。一旦复制了该流,您需要将位置重置为零。我一直在尝试实施您的解决方案。该副本确实有效,但它或多或少会给我留下相同的问题,即使我使用了。position=0或seekorigin。从origi开始nal httpPostedFile,当我将其传递给扫描引擎时,它会出错。但是副本确实正确地保存到文件中。您能否详细说明如何重置原始httpPostedFile位置?@juntowing Fine。谢谢:)