Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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
ASP.NET C#FTP到GoDaddy_C#_Asp.net_Ftp - Fatal编程技术网

ASP.NET C#FTP到GoDaddy

ASP.NET C#FTP到GoDaddy,c#,asp.net,ftp,C#,Asp.net,Ftp,我正在为网站添加一项功能,以便会员可以将自己的照片上传到个人资料中。我遇到的问题是,当我运行自己的本地主机时,我的FTP功能工作正常。然而,当我把网站放在GoDaddy的服务器上并尝试从那里FTP后,它就不起作用了。我明白了 无法连接到远程服务器 这是我的密码: protected string savePath = Path.GetTempPath(); protected string saveThumbPath = Path.GetTempPath() + "/Thumb"; Guid g

我正在为网站添加一项功能,以便会员可以将自己的照片上传到个人资料中。我遇到的问题是,当我运行自己的本地主机时,我的FTP功能工作正常。然而,当我把网站放在GoDaddy的服务器上并尝试从那里FTP后,它就不起作用了。我明白了

无法连接到远程服务器

这是我的密码:

protected string savePath = Path.GetTempPath();
protected string saveThumbPath = Path.GetTempPath() + "/Thumb";
Guid g;
protected void UploadButton_Click(object sender, EventArgs e)
{
    bool worked = false;
    if (FileUploadControl.HasFile)
    {
        try
        {
            g = Guid.NewGuid();
            string filename = Path.GetFileName(FileUploadControl.FileName);
            Bitmap src = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;
            Bitmap thumb = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;

            // Resize the bitmap data
            //Create the large image
            Bitmap result = ProportionallyResizeBitmap(src, 800, 600);
            //string saveName = Server.MapPath(savePath) + g + filename;
            string saveName = savePath + g + filename;
            result.Save(saveName, ImageFormat.Jpeg);
            //Create the thumbnail
            result = ProportionallyResizeBitmap(thumb, 200, 150);
            //string saveThumbName = Server.MapPath(saveThumbPath) + g + filename;
            string saveThumbName = saveThumbPath + g + filename;
            result.Save(saveThumbName, ImageFormat.Jpeg);

            StatusLabel.Text = "Upload status: File uploaded!";
            worked = true;
            Thumbholder.Value = "Thumb" + g + filename;
            Photoholder.Value = g + filename;
// Get the object used to communicate with the server.
//If the specified proxy is an HTTP proxy. only the DownloadFile, ListDirectory and ListDirectoryDetails commands are supported

//get the object used to communicate with the server
System.Net.FtpWebRequest request = System.Net.WebRequest.Create("ftp://mydomain/newcorvetteclub/Images/" + g + filename) as System.Net.FtpWebRequest;
//this example assumes the FTP site uses anoymous login on
//NetWorkCredentials provides credentials for  password-based authentication such as digest, basic, NTLM
request.Credentials = new System.Net.NetworkCredential("username", "password");

//Copy the contents of the file to the request stream
byte[] fileContents = null;
if (FileUploadControl.HasFile)
{
    //fileContents = FileUploadControl.FileBytes;
    fileContents = File.ReadAllBytes(saveName);

}
else
{
    Response.Write("you need to provide a file");
    return;
}
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
request.ContentLength = fileContents.Length;
//GetReequestStream: retrieves the stream used to upload data to an FTP server.
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
System.Net.FtpWebResponse response = request.GetResponse() as System.Net.FtpWebResponse;
//Response.Write("Upload file complete, status: " + response.StatusDescription);
response.Close();
request = System.Net.WebRequest.Create("ftp://mydomain/newcorvetteclub/Images/Thumb" + g + filename) as System.Net.FtpWebRequest;
request.Credentials = new System.Net.NetworkCredential("username", "password");
if (FileUploadControl.HasFile)
{
    fileContents = File.ReadAllBytes(saveThumbName);
}
else
{
    Response.Write("you need to provide a file");
    return;
}
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
request.ContentLength = fileContents.Length;
//GetReequestStream: retrieves the stream used to upload data to an FTP server.
requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
response = request.GetResponse() as System.Net.FtpWebResponse;
//Response.Write("Upload file complete, status: " + response.StatusDescription);

另一件奇怪的事情是,我的电子邮件客户端正在做类似的事情。只要它是通过本地主机运行的,它就可以正常工作,但当它从GoDaddy的服务器运行时,它就会超时。任何帮助都将不胜感激。

问题出在这里,您对这两个调用使用相同的流:

Bitmap src = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;
FileUploadControl.PostedFile.InputStream.Position = 0; // try this
Bitmap thumb = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;

流具有当前位置,因此第一个
.FromStream
可能读取整个流,将流的位置设置为流的结尾。要撤消此操作,您需要通过设置
stream.Position=0

将其重置。问题出在这里,您对这两个调用使用相同的流:

Bitmap src = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;
FileUploadControl.PostedFile.InputStream.Position = 0; // try this
Bitmap thumb = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap;


流具有当前位置,因此第一个
.FromStream
可能读取整个流,将流的位置设置为流的结尾。要撤消此操作,您需要通过设置
stream.Position=0

来重置它。我可以告诉您为什么电子邮件无法通过。您必须使用“relay hosting.secureserver.net”作为SMTP服务器。就FTP而言,你不能在godaddy上执行,因为他们会阻止传出FTP。我刚刚发现。

我可以告诉你为什么电子邮件没有通过。你必须使用“中继托管.secureserver.net”作为SMTP服务器。就FTP而言,你不能在godaddy上执行,因为他们会阻止传出FTP。我刚刚发现。

我用代码中的图像部分对它进行了更新,我不确定哪一行抛出了它,因为它在使用debugger@agent-j、 他使用的
Bitmap
API是GDI+的一个浅包装器。哪一行抛出异常?GDI+是windows图形库,与网络通信没有任何关系。@Inuyasha,在GoDaddy的服务器上运行时,我如何调试?你能将异常写入某种日志吗?我用代码的图像部分更新了它,我不确定哪一行抛出它,因为它在使用debugger@agent-j,他使用的
Bitmap
API是GDI+的一个浅包装器。哪一行抛出异常?GDI+是windows图形库,与网络通信没有任何关系。@Inuyasha,在GoDaddy的服务器上运行时如何调试?您能将异常写入某种日志吗?我插入了您建议的行,现在收到一条无法连接到远程服务器的消息。我觉得奇怪的是,在本地运行时,无论有没有该行,它都可以工作,但一旦转到GoDaddy的serversTry,它就不工作了。将发布的文件保存到磁盘,然后从磁盘读取位图,然后从磁盘删除该文件。您可能根本无法从GoDaddy访问GDI+(我没有托管GDI+的经验)。这就是我正在做的,我正在执行所有位图编辑,将该文件保存到本地临时目录,然后将临时目录文件读回FtpWebRequest流。关于这一点,您实际上是从流中读取位图。可能未写入磁盘的流。试着先把它写到磁盘上,然后读入位图,看看你的问题是流还是GDI+。请解释一下,我很困惑。我以为我正在从文件上传程序读取文件,将其转换为位图流,对该流中的位图执行大小调整,将其作为jpeg保存到临时文件夹,然后将该jpeg放入ftp流。如果这不是我正在做的,那就是我打算做的,如果有人能帮我做到这一点,我将不胜感激。我插入了你建议的行,现在我收到一条无法连接到远程服务器的消息。我觉得奇怪的是,在本地运行时,无论有没有该行,它都可以工作,但一旦转到GoDaddy的serversTry,它就不工作了。将发布的文件保存到磁盘,然后从磁盘读取位图,然后从磁盘删除该文件。您可能根本无法从GoDaddy访问GDI+(我没有托管GDI+的经验)。这就是我正在做的,我正在执行所有位图编辑,将该文件保存到本地临时目录,然后将临时目录文件读回FtpWebRequest流。关于这一点,您实际上是从流中读取位图。可能未写入磁盘的流。试着先把它写到磁盘上,然后读入位图,看看你的问题是流还是GDI+。请解释一下,我很困惑。我以为我正在从文件上传程序读取文件,将其转换为位图流,对该流中的位图执行大小调整,将其作为jpeg保存到临时文件夹,然后将该jpeg放入ftp流。如果这不是我正在做的事情,那就是我打算做的事情,如果有任何帮助,我将不胜感激。你是正确的,将文件添加到godaddy的正确方法是使用.save函数并将其保存到他们在“我的帐户”部分给你的文件路径。你是正确的,向godaddy添加文件的正确方法是使用.save函数并将其保存到他们在“我的帐户”部分中提供给您的文件路径。