Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 使用C代码从服务器下载文件_C# - Fatal编程技术网

C# 使用C代码从服务器下载文件

C# 使用C代码从服务器下载文件,c#,C#,我有以下代码从服务器下载文件: private void DocumentDownloadProcess(ProjectDocument projectDocument) { int projectDocumentId = projectDocument.ProjectDocumentId; ProjectDocumentBizManager projectDocumentBM = new ProjectDocumentBizManager();

我有以下代码从服务器下载文件:

private void DocumentDownloadProcess(ProjectDocument projectDocument)
    {

        int projectDocumentId = projectDocument.ProjectDocumentId;
        ProjectDocumentBizManager projectDocumentBM = new ProjectDocumentBizManager();

        projectDocument = projectDocumentBM.GetProjectDocumentById(projectDocumentId);

        int serverId = projectDocument.ServerId;
        //int serverId = 14;
        //ServerBizManager serverBM = BizManagerFactory.BizManagerFactory.GetBizManager<ServerBizManager>();
        //Server server = serverBM.GetServerByServerId(serverId);

        ArchiveServerBizManager serverBM = BizManagerFactory.BizManagerFactory.GetBizManager<ArchiveServerBizManager>();
        ArchiveServer server = serverBM.GetArchiveServerByArchiveServerId(serverId);
        string serverName = server.ServerName;

        string uploadFolder = projectDocument.UploadFolder;

        int loginCredentialId = projectDocument.LoginCredentialId;
        LoginCredentialBizManager loginCBM = BizManagerFactory.BizManagerFactory.GetBizManager<LoginCredentialBizManager>();
        LoginCredential loginCre = loginCBM.GetLoginCredential(loginCredentialId);

        IRemoteServer remoteServer = null;
        remoteServer = RemoteServerFactory.GetRemoteServer(0, serverName, Enums.TransferMethod.COPY, loginCre.UserName, loginCre.EncryptedPassword, false);
        remoteServer.Connect();

        string projectId = Request.Params["ProjectId"];
        string filePath = @"\\" + serverName + @"\" + uploadFolder + @"\" + projectId + @"\" + projectDocument.URL;

        MemoryStream ms = remoteServer.ReadFileToMemoryStream(filePath);

        long dataLengthToRead = ms.Length;
        int blockSize = (int)dataLengthToRead;
        byte[] buffer = new byte[dataLengthToRead];

        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.BufferOutput = true;
        Response.AddHeader("Content-Disposition", "attachment; filename=" + projectDocument.URL);
        Response.AddHeader("Content-Length", ms.Length.ToString());

        while (dataLengthToRead > 0 && Response.IsClientConnected)
        {
            Int32 lengthRead = ms.Read(buffer, 0, blockSize);
            Response.OutputStream.Write(buffer, 0, lengthRead);
            dataLengthToRead = dataLengthToRead - lengthRead;
        }

        Response.Flush();
        Response.Close();
    }
当我在本地运行此代码时,它正在下载文件,没有任何冲突。一旦在任何服务器上部署了它,如果我试图下载一个文件,它就会删除文本文件中的几个字节。除了文本文件,所有其他类型的文件都已损坏


原因可能是什么?我怎样才能解决这个问题?有没有其他最好的方法来下载文件,使其不会被破坏?

很可能是因为HttpResponse认为您想要输出文本,而不是二进制文件

选项:

将Response.ContentType设置为正确的类型 使用Repsonse.BinaryWrite 只需使用Response.TransmitFile 您是否尝试使用IHttpHandler下载该文件


我怀疑你在一个.aspx文件中这么做。如果是这样的话,考虑一下。给你