为什么上传文件格式 20% 时.jpg我得到异常

本文关键字:jpg 异常 文件 格式 为什么 | 更新日期: 2023-09-27 18:34:19

原因是%如果我上传 20 个文件并且它们都是 jpg 没有问题,但如果其中一个文件名是例如 20%.jpg 或 50%.jpg我无法上传它们。

我可以编辑和查看硬盘上的图像,但无法上传它们。

现在,例如,对于文件索引 0 中的测试,我有:D:''5%.jpg所以 txf 和 fn 都包含:D:''5%.jpg

这是我将文件上传到ftp服务器的方法的顶部:

当我在此方法中调用方法createDirectory时,会发生异常。

private void StringArrayUploadFiles(object sender, DoWorkEventArgs e)
        {
            try
            {
                foreach (string txf in files)
                {
                    string fn = txf;
                    BackgroundWorker bw = sender as BackgroundWorker;
                    FileInfo fileInfo = new FileInfo(txf);
                    f.TargetFolder = fileInfo.DirectoryName;
                    f.TargetFolder = Path.GetDirectoryName(txf);
                    f.TargetFolder = Path.GetFullPath(txf).Replace(":", "").Replace("''", "/");
                    string filenameonly = Path.GetFileName(f.TargetFolder);
                    int index = txf.IndexOf(filenameonly);
                    string left = txf.Substring(0, index);
                    f.TargetFolder = Path.GetFullPath(left).Replace(":", "").Replace("''", "");
                    createDirectory(f.TargetFolder);

变量 f 是 FtpSettings:

public class FtpSettings
    {
        public string Host, Username, Password, TargetFolder, SourceFile;
        public bool Passive;
        public int Port = 21;
    }

文件是字符串[]

当我尝试在 ftp 服务器上为文件创建目录时,会发生异常。那是在我从下载方法调用的方法 createDirectory 中:

createDirectory(f.TargetFolder);

这是 createDirectory 方法:

public void createDirectory(string newDirectory)
        {
            try
            {
                string FtpHost = f.Host + "/" + newDirectory;
                if (!FtpHost.ToLower().StartsWith("ftp://"))
                    FtpHost = "ftp://" + FtpHost;
                ftpRequest = (FtpWebRequest)WebRequest.Create(FtpHost);
                ftpRequest.Credentials = new NetworkCredential(f.Username, f.Password);
                ftpRequest.UseBinary = true;
                ftpRequest.UsePassive = true;
                ftpRequest.KeepAlive = true;
                ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                ftpResponse1 = (FtpWebResponse)ftpRequest.GetResponse();
                ftpResponse1.Close();
                ftpRequest = null;
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            return;
        }

在变量 newDirectory 中,我有:D这很好,所以我不确定 % 在哪里或为什么 % 会出现问题。

该行的 createDirectory 方法中的异常 heppen :

ftpResponse1 = (FtpWebResponse)ftpRequest.GetResponse();
System.Net.WebException was caught
  HResult=-2146233079
  Message=The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
  Source=System
  StackTrace:
       at System.Net.FtpWebRequest.CheckError()
       at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
       at System.IO.Stream.Close()
       at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
       at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
       at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
       at System.Net.FtpWebRequest.GetResponse()
       at FTP_ProgressBar.FtpProgress.createDirectory(String newDirectory) in c:'ftp_progressbar'FTP_ProgressBar'FtpProgress.cs:line 270
  InnerException:

第 270 行是:

ftpResponse1 = (FtpWebResponse)ftpRequest.GetResponse();

为什么上传文件格式 20% 时.jpg我得到异常

也许在 ftp URI 中特殊字符(如 20% 或其他字符(?尝试使用HttpUtility.UrlDecodeHttpUtility.UrlEncode