如何在.NET中使用C#对图像进行FTP传输

本文关键字:图像 传输 FTP NET | 更新日期: 2023-09-27 18:21:16

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

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

我不想因为各种原因而必须先用身体保存它——不保存它就可以做到这一点吗?

如何在.NET中使用C#对图像进行FTP传输

在没有看到代码的情况下,很难解决问题所在。当你打开一个新的流,即从文件中打开时,它会起作用,我的最佳猜测是问题与你处理流的方式有关。确保在完成对流的写入后,使用Seek方法或position属性将其位置设置回起始位置。

你需要发布你的代码,让任何人都能更准确地回答。

一般来说,如果输出被破坏,你可能需要检查之类的参数

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");