如何使用.NET中的C#FTP图像

如何使用.NET中的C#FTP图像,c#,.net,image,ftp,stream,C#,.net,Image,Ftp,Stream,我有一个在内存中的图像,并想转换成一个流,所以我可以FTP。我已经使用MemoryStream和FtpWebRequest完成了这项工作。但是,结果是无法打开文件 当我第一次将图像保存到一个物理文件时,一个可行的场景就是这样。然后我使用文件流打开该物理文件,并将该流发送到Ftp 由于各种原因,我不想先实际保存它-是否可以不保存就保存它?您需要发布代码,以便任何人都能更准确地回答 通常,如果输出损坏,您可能需要检查参数,如 ftpRequest.UseBinary = true; ftpReque

我有一个在内存中的图像,并想转换成一个流,所以我可以FTP。我已经使用MemoryStream和FtpWebRequest完成了这项工作。但是,结果是无法打开文件

当我第一次将图像保存到一个物理文件时,一个可行的场景就是这样。然后我使用文件流打开该物理文件,并将该流发送到Ftp


由于各种原因,我不想先实际保存它-是否可以不保存就保存它?

您需要发布代码,以便任何人都能更准确地回答

通常,如果输出损坏,您可能需要检查参数,如

ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
这是一篇关于如何做到这一点的精彩文章

我建议先将一个合适的图像ftping到所需的位置进行测试(以测试传输是否成功),然后测试将图像转储到文件中的代码(以查看那里是否一切正常)。

尝试以下方法:

class FTPHelper
{
    public FTPHelper(string address, string login, string password)
    {
        Address = address;
        Login = login;
        Password = password;
    }

    public void Upload(MemoryStream stream, string fileName)
    {
        try
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Address + @"/" + fileName);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(Login,Password);

            request.UseBinary = true;

            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, buffer.Length);
            stream.Close();

            Stream requestStream = request.GetRequestStream();
            requestStream.Write(buffer, 0, buffer.Length);
            requestStream.Close();

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
            response.Close();
        }
        catch (Exception)
        {
            throw;
        }
    }

    public string Address { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }
}
FTPHelper
类的使用:

byte[] data;
using (Image image = Image.FromFile(@"C:\test\test.jpg"))
{
    using (MemoryStream m = new MemoryStream())
    {
        image.Save(m, image.RawFormat);
        data = m.ToArray();
    }
}

FTPHelper ftpHelper = new FTPHelper("ftp://localhost", "test", "test");
ftpHelper.Upload(new MemoryStream(data), "test.jpeg");

如果不查看代码,就很难确定问题所在。当你打开一个新的流时,也就是从一个文件中打开时,我最好的猜测是这个问题与你处理流的方式有关。确保在完成对流的写入后,使用Seek方法或position属性将其位置设置回起始位置。

请发布代码猜测,但FTP中的默认传输通常是文本,对于需要二进制传输的图像。