gpt4 book ai didi

c# - FTP 无法正确上传文件

转载 作者:行者123 更新时间:2023-11-30 16:21:30 25 4
gpt4 key购买 nike

我正在尝试制作一个小型个人屏幕捕获应用程序,我可以在其中按快捷键并上传屏幕的完整屏幕截图。

我已经设法将文件上传到我的网站,但我遇到的问题是,当您转到 URL 时,它显示为损坏的图像。

这是我的代码:

private void CaptureFullScreen()
{
string file = DateTime.Now.ToString("ddmmyyyyhhmmss") + ".jpg";
string file_store = screenshotDir + "\\" + file;

Rectangle bounds = Screen.GetBounds(Point.Empty);
using(Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using(Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}

bitmap.Save(file_store, ImageFormat.Jpeg);
}

//System.Diagnostics.Process.Start(file);
ShowBalloonTip("Uploading...", "Screen Capture is being uploaded", ToolTipIcon.Info, 1000);
FtpFileUpload(file_store, file);
}
private void FtpFileUpload(string file_store, string file_name)
{
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://passion4web.co.uk/www/apps/imgcap/" + file_name);
request.Method = WebRequestMethods.Ftp.UploadFile;

request.Credentials = new NetworkCredential("username", "password");

StreamReader strRead = new StreamReader(file_store);
byte[] fileContents = Encoding.UTF8.GetBytes(strRead.ReadToEnd());
strRead.Close();
request.ContentLength = fileContents.Length;

Stream reqStream = request.GetRequestStream();
reqStream.Write(fileContents, 0, fileContents.Length);
reqStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

string url = "http://passion4web.co.uk/apps/imgcap/" + file_name;
string resp = response.StatusDescription;

ShowBalloonTip("Screenshot uploaded", "Click this balloon to open", ToolTipIcon.Info, 5000, url);

response.Close();
}
catch (Exception ex)
{
//Ignore this - used for debugging
MessageBox.Show(ex.ToString(),"Upload error");
MessageBox.Show(file_name + Environment.NewLine + file_store, "Filename, Filestore");
}
}

举个例子: Screenshot

有什么想法吗?

最佳答案

问题是:

StreamReader strRead = new StreamReader(file_store);
byte[] fileContents = Encoding.UTF8.GetBytes(strRead.ReadToEnd());

您正在阅读您的文件,就好像它是 UTF-8 编码的文本一样。它不是 - 它是一个图像。任意二进制数据。

使用:

byte[] fileContents = File.ReadAllBytes(file_store);

一切都应该没问题。

您的代码的其余部分仍然可以使用一些 TLC - 修复命名约定,适本地使用 using 语句等 - 但将任意二进制数据作为文本处理是这里的主要问题。

关于c# - FTP 无法正确上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com