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文件中这么做。如果是这样的话,考虑一下。给你