CS结构下怎么上传文件到服务器,客户端怎么打开文件? CS结构下怎么上传文件到服务器(文件保存在指定目录下,数据库记录地址),客户端怎么打开文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在服务器端做一个service,来跟客户端通讯啊,上传下载都可以,也安全,也省力。 在服务器端做一个service,来跟客户端通讯啊 服务器端装iis,然后用WebClient 这个对象来上传。客户端下载文件可以用WebRequest,WebResponse来做。 使用webservice吧打开的话,应该去下载服务器端的文件到本地,然后打开。 我还是那句老话。虽然大家都没听过。简单点···直接File.copy() 如果参数是远程路径,那么可以直接远程拷贝过去,哪需要那么复杂? private void Upload(string filename){ FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Upload Error"); }}//以上代码简单的示例了ftp的上传功能。创建一个指向某ftp服务器的FtpWebRequest对象,然后设置其不同的属性Credentials,KeepAlive,Method,UseBinary,ContentLength。//打开本地机器上的文件,把其内容写入ftp请求流。缓冲的大小为2kb,无论上传大文件还是小文件,这都是一个合适的大小。private void Download(string filePath, string fileName){ FtpWebRequest reqFTP; try { FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }} 上传带进度条已经实现,但是下载的时候带进度条这么实现呢?用long cl = response.ContentLength; 这里我跟踪了一下,值却是-1。另开一贴http://topic.csdn.net/u/20081211/10/8a2b858f-f5d2-4e32-891d-604a2941acab.html?seed=357418522 获取FTP上指定文件的大小得单独写的,完整的FTP下载代码:#region FTP下载带进度条 /// <summary> /// FTP下载带进度条 /// </summary> /// <param name="filePath">下载到客户端的地址</param> /// <param name="fileName">FTP上对应的文件名</param> /// <returns></returns> private bool FtpDownload(string filePath, string fileName) { this.lbl_ftpStakt.Text = "连接服务器中..."; FtpWebRequest reqFTP; try { //打开一个文件流 (System.IO.FileStream) 去读要下载的文件 FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; // 指定数据传输类型 reqFTP.UseBinary = true; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); //这里其实娶不到FTP上该文件的大小,应另写方法来获取(WebRequestMethods.Ftp.GetFileSize) //long cl = response.ContentLength; // 缓冲大小设置为2kb int bufferSize = 8192;// 4096;// 2048; //局域网内可以放大点 int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); //FTP上文件的大小 int allbye = this.GetFtpFileSize(fileName); int startbye = 0; this.myProgressControl.Maximum = allbye; this.myProgressControl.Minimum = 0; this.myProgressControl.Visible = true; this.lbl_ftpStakt.Visible = true; // 流内容没有结束 while (readCount > 0) { // 把内容从file stream 写入 DownLoadStream outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); // startbye += readCount; this.lbl_ftpStakt.Text = "已下载:" + (int)(startbye / 1024) + "KB/" + "总长度:" + (int)(allbye / 1024) + "KB" + " " + " 文件名:" + fileName; myProgressControl.Value = startbye; Application.DoEvents(); Thread.Sleep(5); } this.myProgressControl.Visible = false; this.lbl_ftpStakt.Text = "下载成功!"; ftpStream.Close(); outputStream.Close(); response.Close(); return true; } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } finally { } } #endregion#region 获取FTP服务器上指定文件的大小 /// <summary> /// 获取FTP服务器上指定文件的大小 /// </summary> /// <param name="fileName">FTP服务器上的文件名</param> /// <returns></returns> private int GetFtpFileSize(string fileName) { FtpWebRequest reqFTP; int fileSize = 0; try { reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.GetFileSize; reqFTP.UseBinary = true; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); fileSize = (int)response.ContentLength; ftpStream.Close(); response.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } return fileSize; } #endregion 视频转换 C#读取.CSV文件的问题(急~!) timer控件问题 线程阻塞的问题,请教。。。急。 如何改变拖动窗体时虚框的样式?高手指教。 网页出错(javascript) 求助:下载中文名的文件乱码 请问有没有自动化封装com组件为webservice的工具 请大家推荐做winform的好用的皮肤控件! 我要加密一段数字, 用md5 加密后有英文字母, 什么加密算法,加密后只有数字? C#如何读取条形码 (先由scanner读取到文本编辑器中) VS2008打包
客户端下载文件可以用WebRequest,WebResponse来做。
打开的话,应该去下载服务器端的文件到本地,然后打开。
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); // ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false; // 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型
reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为2kb
int buffLength = 2048; byte[] buff = new byte[buffLength];
int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
try
{
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength);
} // 关闭两个流
strm.Close();
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Upload Error");
}
}
//以上代码简单的示例了ftp的上传功能。创建一个指向某ftp服务器的FtpWebRequest对象,然后设置其不同的属性Credentials,KeepAlive,Method,UseBinary,ContentLength。//打开本地机器上的文件,把其内容写入ftp请求流。缓冲的大小为2kb,无论上传大文件还是小文件,这都是一个合适的大小。private void Download(string filePath, string fileName)
{
FtpWebRequest reqFTP; try
{
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize);
} ftpStream.Close(); outputStream.Close(); response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
用long cl = response.ContentLength; 这里我跟踪了一下,值却是-1。
另开一贴
http://topic.csdn.net/u/20081211/10/8a2b858f-f5d2-4e32-891d-604a2941acab.html?seed=357418522
#region FTP下载带进度条
/// <summary>
/// FTP下载带进度条
/// </summary>
/// <param name="filePath">下载到客户端的地址</param>
/// <param name="fileName">FTP上对应的文件名</param>
/// <returns></returns>
private bool FtpDownload(string filePath, string fileName)
{
this.lbl_ftpStakt.Text = "连接服务器中...";
FtpWebRequest reqFTP;
try
{
//打开一个文件流 (System.IO.FileStream) 去读要下载的文件
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
// 指定数据传输类型
reqFTP.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream();
//这里其实娶不到FTP上该文件的大小,应另写方法来获取(WebRequestMethods.Ftp.GetFileSize)
//long cl = response.ContentLength;
// 缓冲大小设置为2kb
int bufferSize = 8192;// 4096;// 2048; //局域网内可以放大点 int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize);
//FTP上文件的大小
int allbye = this.GetFtpFileSize(fileName);
int startbye = 0;
this.myProgressControl.Maximum = allbye;
this.myProgressControl.Minimum = 0;
this.myProgressControl.Visible = true;
this.lbl_ftpStakt.Visible = true;
// 流内容没有结束
while (readCount > 0)
{
// 把内容从file stream 写入 DownLoadStream
outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize);
//
startbye += readCount;
this.lbl_ftpStakt.Text = "已下载:" + (int)(startbye / 1024) + "KB/" + "总长度:" + (int)(allbye / 1024) + "KB" + " " + " 文件名:" + fileName;
myProgressControl.Value = startbye;
Application.DoEvents();
Thread.Sleep(5);
}
this.myProgressControl.Visible = false;
this.lbl_ftpStakt.Text = "下载成功!";
ftpStream.Close();
outputStream.Close();
response.Close();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
finally
{
}
}
#endregion
#region 获取FTP服务器上指定文件的大小
/// <summary>
/// 获取FTP服务器上指定文件的大小
/// </summary>
/// <param name="fileName">FTP服务器上的文件名</param>
/// <returns></returns>
private int GetFtpFileSize(string fileName)
{
FtpWebRequest reqFTP;
int fileSize = 0;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.GetFileSize; reqFTP.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
fileSize = (int)response.ContentLength; ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return fileSize;
}
#endregion