FTP上传图片 我在用C#做手机软件开发,需要向指定FTP服务器上传图片。 请问哪位高手能不能告诉我可以用那些FTP类? 或者提供给我一些例子?多谢了!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FtpWebRequest 类http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx using System;using System.IO;using System.Net;using System.Net.Security;using System.Collections;using System.Collections.Generic;using System.Security.Cryptography.X509Certificates;using System.Web;using System.Web.Configuration; 1 public sealed class FtpClientService 2 { 3 #region Internal Members 4 5 private NetworkCredential certificate; 6 7 #endregion 8 9 /// <summary>10 /// 构造函数,提供初始化数据的功能,打开Ftp站点11 /// </summary>12 public FtpClientService()13 {14 certificate = new NetworkCredential(WebConfigurationManager.AppSettings["UserName"], WebConfigurationManager.AppSettings["PassWord"]);15 }16 17 /// <summary>18 /// 创建FTP请求19 /// </summary>20 /// <param name="uri">ftp://myserver/upload.txt</param>21 /// <param name="method">Upload/Download</param>22 /// <returns></returns>23 private FtpWebRequest CreateFtpWebRequest(Uri uri, string method)24 {25 FtpWebRequest ftpClientRequest = (FtpWebRequest)WebRequest.Create(uri);26 27 ftpClientRequest.Proxy = null;28 ftpClientRequest.Credentials = certificate;29 ftpClientRequest.KeepAlive = true;30 ftpClientRequest.UseBinary = true;31 ftpClientRequest.UsePassive = true;32 ftpClientRequest.Method = method;33 34 //ftpClientRequest.Timeout = -1;35 36 return ftpClientRequest;37 }38 #region 支持断点续传39 40 public bool UploadFile(string sourceFile, Uri destinationPath, int offSet,string ftpMethod)41 {42 try43 {44 FileInfo file = new FileInfo(sourceFile);45 Uri uri = new Uri(destinationPath.AbsoluteUri + "/" + file.Name);46 FtpWebRequest request = CreateFtpWebRequest(uri, ftpMethod);47 request.ContentOffset = offSet;48 Stream requestStream = request.GetRequestStream();//需要获取文件的流49 FileStream fileStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);//创建存储文件的流50 int sourceLength = (int)fileStream.Length;51 offSet = CopyDataToDestination(fileStream, requestStream, offSet);52 WebResponse response = request.GetResponse();53 response.Close();54 if (offSet != 0)55 {56 UploadFile(sourceFile, destinationPath, offSet, WebRequestMethods.Ftp.AppendFile);57 }58 }59 catch(Exception ex)60 {61 ex.ToString();62 return false;63 }64 65 return true;66 }67 68 private int CopyDataToDestination(Stream sourceStream, Stream destinationStream, int offSet)69 {70 try71 {72 int sourceLength = (int)sourceStream.Length;73 int length = sourceLength - offSet;74 byte[] buffer = new byte[length + offSet];75 int bytesRead = sourceStream.Read(buffer, offSet, length);76 while (bytesRead != 0)77 {78 destinationStream.Write(buffer, 0, bytesRead);79 bytesRead = sourceStream.Read(buffer, 0, length);80 length = length - bytesRead;81 offSet = (bytesRead == 0) ? 0 : (sourceLength - length);//(length - bytesRead); 82 }83 }84 catch(Exception ex)85 {86 string error = ex.ToString();87 return offSet;88 }89 finally90 {91 destinationStream.Close();92 sourceStream.Close();93 }94 return offSet;95 }96 #endregion97 }//这里是一段上面的测试代码private FtpClientService ftpClient; [TestMethod] public void UploadFileSupportFitfulTest() { ftpClient = new FtpClientService(); ftpClient.UploadFile(@"\\10.16.174.31\NeweggPictures\newEgg\ProdTourOff.gif", new Uri("ftp://10.16.50.189/SlaveImageServer/NewEgg/GroupFTPTest/"), 0, WebRequestMethods.Ftp.UploadFile); 前台页面源码: <tr> <td class="td" style="height: 25px; width: 76px;">产品图片:</td> <td style="height: 25px"><input type="file" name="file5" id="upfile" runat="server" class="kuang" />(图片格式:.jpg,.gif) <input type="submit" name="Submit4" id="btnupfile" runat="server" value="上传" class="btn" onserverclick="btnupfile_ServerClick"/> <asp:Label ID="lblproimage" runat="server" Text=""></asp:Label></td> </tr>===========================================================================================================后台代码: protected void btnupfile_ServerClick(object sender, EventArgs e) { HttpPostedFile hpf = this.upfile.PostedFile; string FileSize = Convert.ToString(Convert.ToInt32(hpf.ContentLength.ToString()) / 1024) + "KB"; //取得文件名(不含路径) char[] de ={ '\\' }; string[] AFilename = hpf.FileName.Split(de); string strFilename = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + AFilename[AFilename.Length - 1]; if (strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "jpg" || strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "gif") { hpf.SaveAs(Server.MapPath(".") + "\\proimage\\" + strFilename); Session["FileName"] = strFilename; this.lblproimage.Text = "图片名:" + strFilename.ToString(); ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片上传成功!\");</script>"); return; } else { ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片格式不正确!\");</script>"); return; } } Socket自定义协议,用HTTP或FTP服务器,那就用Wininet函数相应的函数。 弱弱的问下:SplitContainer是不是只能拆分成两个区域啊 Ext.net的项目部署到Window 2008服务器上 [Winform] Process执行问题。谢谢 c#如何打开任意程序? 没分题 问个简单问题 如何把text文件作为数据源读取到DataTable中 在asp.net中怎样检测在文本框中按下了回车键? 如何用C#编写rgb转换成hsi的h分量 为什么装了2001年的core sdk后vs.net用不了了?? 老问题,datagridview上对数据做修改 Gridview自动生成超链接
using System.IO;
using System.Net;
using System.Net.Security;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Web.Configuration;
1 public sealed class FtpClientService
2 {
3 #region Internal Members
4
5 private NetworkCredential certificate;
6
7 #endregion
8
9 /// <summary>
10 /// 构造函数,提供初始化数据的功能,打开Ftp站点
11 /// </summary>
12 public FtpClientService()
13 {
14 certificate = new NetworkCredential(WebConfigurationManager.AppSettings["UserName"], WebConfigurationManager.AppSettings["PassWord"]);
15 }
16
17 /// <summary>
18 /// 创建FTP请求
19 /// </summary>
20 /// <param name="uri">ftp://myserver/upload.txt</param>
21 /// <param name="method">Upload/Download</param>
22 /// <returns></returns>
23 private FtpWebRequest CreateFtpWebRequest(Uri uri, string method)
24 {
25 FtpWebRequest ftpClientRequest = (FtpWebRequest)WebRequest.Create(uri);
26
27 ftpClientRequest.Proxy = null;
28 ftpClientRequest.Credentials = certificate;
29 ftpClientRequest.KeepAlive = true;
30 ftpClientRequest.UseBinary = true;
31 ftpClientRequest.UsePassive = true;
32 ftpClientRequest.Method = method;
33
34 //ftpClientRequest.Timeout = -1;
35
36 return ftpClientRequest;
37 }
38 #region 支持断点续传
39
40 public bool UploadFile(string sourceFile, Uri destinationPath, int offSet,string ftpMethod)
41 {
42 try
43 {
44 FileInfo file = new FileInfo(sourceFile);
45 Uri uri = new Uri(destinationPath.AbsoluteUri + "/" + file.Name);
46 FtpWebRequest request = CreateFtpWebRequest(uri, ftpMethod);
47 request.ContentOffset = offSet;
48 Stream requestStream = request.GetRequestStream();//需要获取文件的流
49 FileStream fileStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);//创建存储文件的流
50 int sourceLength = (int)fileStream.Length;
51 offSet = CopyDataToDestination(fileStream, requestStream, offSet);
52 WebResponse response = request.GetResponse();
53 response.Close();
54 if (offSet != 0)
55 {
56 UploadFile(sourceFile, destinationPath, offSet, WebRequestMethods.Ftp.AppendFile);
57 }
58 }
59 catch(Exception ex)
60 {
61 ex.ToString();
62 return false;
63 }
64
65 return true;
66 }
67
68 private int CopyDataToDestination(Stream sourceStream, Stream destinationStream, int offSet)
69 {
70 try
71 {
72 int sourceLength = (int)sourceStream.Length;
73 int length = sourceLength - offSet;
74 byte[] buffer = new byte[length + offSet];
75 int bytesRead = sourceStream.Read(buffer, offSet, length);
76 while (bytesRead != 0)
77 {
78 destinationStream.Write(buffer, 0, bytesRead);
79 bytesRead = sourceStream.Read(buffer, 0, length);
80 length = length - bytesRead;
81 offSet = (bytesRead == 0) ? 0 : (sourceLength - length);//(length - bytesRead);
82 }
83 }
84 catch(Exception ex)
85 {
86 string error = ex.ToString();
87 return offSet;
88 }
89 finally
90 {
91 destinationStream.Close();
92 sourceStream.Close();
93 }
94 return offSet;
95 }
96 #endregion
97 }//这里是一段上面的测试代码
private FtpClientService ftpClient; [TestMethod]
public void UploadFileSupportFitfulTest()
{
ftpClient = new FtpClientService();
ftpClient.UploadFile(@"\\10.16.174.31\NeweggPictures\newEgg\ProdTourOff.gif", new Uri("ftp://10.16.50.189/SlaveImageServer/NewEgg/GroupFTPTest/"), 0, WebRequestMethods.Ftp.UploadFile);
<tr>
<td class="td" style="height: 25px; width: 76px;">产品图片:</td>
<td style="height: 25px"><input type="file" name="file5" id="upfile" runat="server" class="kuang" />(图片格式:.jpg,.gif)
<input type="submit" name="Submit4" id="btnupfile" runat="server" value="上传" class="btn" onserverclick="btnupfile_ServerClick"/>
<asp:Label ID="lblproimage" runat="server" Text=""></asp:Label></td>
</tr>===========================================================================================================后台代码:
protected void btnupfile_ServerClick(object sender, EventArgs e)
{
HttpPostedFile hpf = this.upfile.PostedFile;
string FileSize = Convert.ToString(Convert.ToInt32(hpf.ContentLength.ToString()) / 1024) + "KB";
//取得文件名(不含路径)
char[] de ={ '\\' };
string[] AFilename = hpf.FileName.Split(de);
string strFilename = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + AFilename[AFilename.Length - 1];
if (strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "jpg" || strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "gif")
{
hpf.SaveAs(Server.MapPath(".") + "\\proimage\\" + strFilename);
Session["FileName"] = strFilename;
this.lblproimage.Text = "图片名:" + strFilename.ToString();
ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片上传成功!\");</script>");
return;
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片格式不正确!\");</script>");
return;
}
}