这些是函数调用
protected void btnDownload_Click(object sender,EventArgs e) { string FullServer =ftp://+ ftpServerIP; 下载(FullServer,LbxServer.SelectedValue); } protected void btnUpload_Click(object sender,EventArgs e) {上传(LbxLocal.SelectedValue); }感谢大家对此事有任何帮助。
解决方案我想你会发现 ftp:// myservername 是一个无效的方案新的 FileStream 。请注意,您的 FileStream 表示本地目标,而不是远程文件。
如果您打算下载远程文件到您的本地系统, filePath 应该引用本地网络上的一个文件夹(例如, C:\temp 或 \\somecomputer\share 等)
I get "System.NotSupportedException: The given path's format is not supported. at System.Security.Util.StringExpressionSet" when trying to download an item from an ftp(which have access to). The upload seems to work fine and is done similarly I'll post both functions below:
private void Download(string filePath, string fileName) { FtpWebRequest reqFTP; try { //filePath = <<The full path where the file is to be created. the>>, //fileName = <<Name of the file to be createdNeed not name on FTP server. name name()>> Label1.Text = filePath + "/" + fileName; FileStream outputStream = new FileStream(filePath + "/" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { Label1.Text = ex.ToString(); } } public void Upload(string filename) { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; FtpWebRequest reqFTP; // Create FtpWebRequest object from the Uri provided reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP +"/" + fileInf.Name)); // Provide the WebPermission Credintials reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // By default KeepAlive is true, where the control connection is not closed // after a command is executed. reqFTP.KeepAlive = false; // Specify the command to be executed. reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // Specify the data transfer type. reqFTP.UseBinary = true; // Notify the server about the size of the uploaded file reqFTP.ContentLength = fileInf.Length; // The buffer size is set to 2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // Opens a file stream (System.IO.FileStream) to read the file to be uploaded FileStream fs = fileInf.OpenRead(); try { // Stream to which the file to be upload is written Stream strm = reqFTP.GetRequestStream(); // Read from the file stream 2kb at a time contentLen = fs.Read(buff, 0, buffLength); // Till Stream content ends while (contentLen != 0) { // Write Content from the file stream to the FTP Upload Stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // Close the file stream and the Request Stream strm.Close(); fs.Close(); } catch (Exception ex) { //MessageBox.Show(ex.Message, "Upload Error"); } }and these are the function calls
protected void btnDownload_Click(object sender, EventArgs e) { string FullServer = "ftp://" + ftpServerIP; Download(FullServer, LbxServer.SelectedValue); } protected void btnUpload_Click(object sender, EventArgs e) { Upload(LbxLocal.SelectedValue); }Thank you all for any help on this matter.
解决方案I think you'll find that ftp://myservername is an invalid scheme for a new FileStream. Note that your FileStream represents the local target, not the remote file.
If your intent is to download a remote file to your local system, filePath should refer to a folder on your local network (e.g., C:\temp or \\somecomputer\share, etc.)
更多推荐
c#asp.net FTP错误
发布评论