我试图使用C#将jpeg上传到ftp服务器。文件已上传但打开时已损坏。 这是我的代码:
/// <summary>
/// Upload HttpPostedFileBase to ftp server
/// </summary>
/// <param name="image">type of HttpPostedFileBase</param>
/// <param name="targetpath">folders path in ftp server</param>
/// <param name="source">jpeg image name</param>
public static void UploadFileToFTP(HttpPostedFileBase image,string targetpath,string source)
{
string ftpurl = ConfigurationManager.AppSettings["Ftp_Images_Domain"];
string ftpusername = ConfigurationManager.AppSettings["Ftp_Images_Usr"];
string ftppassword = ConfigurationManager.AppSettings["Ftp_Images_Pwd"];
try
{
SetMethodRequiresCWD();
string filename = Path.GetFileName(source);
string ftpfullpath = ftpurl + targetpath + source;
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.KeepAlive = false;
ftp.UseBinary = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
HttpPostedFileBase myFile = image;
int nFileLen = myFile.ContentLength;
byte[] myData = new byte[nFileLen];
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(myData, 0, nFileLen);
ftpstream.Close();
ftpstream.Flush();
}
catch (WebException e)
{
String status = ((FtpWebResponse)e.Response).StatusDescription;
}
}
我假设问题出在我写入ftp流的字节数组中。只是不知道如何解决它。 任何帮助表示赞赏:-)谢谢
答案 0 :(得分:3)
byte[] myData
永远不会使用图像数据进行初始化。下面是正确的代码。我从代码中删除了一些不需要的行。尝试一下,让我知道它是否正常工作
/// <summary>
/// Upload HttpPostedFileBase to ftp server
/// </summary>
/// <param name="image">type of HttpPostedFileBase</param>
/// <param name="targetpath">folders path in ftp server</param>
/// <param name="source">jpeg image name</param>
public static void UploadFileToFTP(HttpPostedFileBase image,string targetpath,string source) {
string ftpurl = ConfigurationManager.AppSettings["Ftp_Images_Domain"];
string ftpusername = ConfigurationManager.AppSettings["Ftp_Images_Usr"];
string ftppassword = ConfigurationManager.AppSettings["Ftp_Images_Pwd"];
try {
SetMethodRequiresCWD();
string ftpfullpath = ftpurl + targetpath + source;
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.KeepAlive = false;
ftp.UseBinary = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
using ( Stream ftpstream = ftp.GetRequestStream() )
image.InputStream.CopyTo(ftpstream)
} catch (WebException e) {
String status = ((FtpWebResponse)e.Response).StatusDescription;
}
}
答案 1 :(得分:0)
我没有尝试使用HttpPostedFileBase,但下面的方法有效,应该让您了解代码中发生的事情。
public class Test
{
public static void UploadFileToFTP()
{
string ftpurl = "ftp://ServerName:21/test.txt";
try
{
string filename = "F:\\testing.txt";
string ftpfullpath = ftpurl;
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential();
//ftp.KeepAlive = false;
ftp.UsePassive = false;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
byte[] myFile = File.ReadAllBytes(filename);
ftp.ContentLength = myFile.Length;
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(myFile, 0, myFile.Length);
ftpstream.Close();
ftpstream.Flush();
}
catch (WebException e)
{
String status = ((FtpWebResponse)e.Response).StatusDescription;
}
}
}