protected override Task <HttpResponseMessage> ListTransportSpecificFileAsync(string folderPath) { Collection <TC.FileInfo> files = new Collection <TC.FileInfo>(); return(Task.Factory.StartNew(() => { if (!this.ValidateController()) { return this.Request.CreateResponse(HttpStatusCode.BadRequest, this.validationErrors); } try { using (Session session = new Session()) { HttpResponseMessage response; if ((response = this.OpenSession(session)).StatusCode != HttpStatusCode.OK) { return response; } RemoteDirectoryInfo remoteDirectoryInfo = session.ListDirectory(folderPath); for (int i = 0; i < remoteDirectoryInfo.Files.Count; i++) { string fileName = remoteDirectoryInfo.Files[i].Name; if (!fileName.Equals(".") && !fileName.Equals("..")) { TC.FileInfo info = new TC.FileInfo(this.ServerAddress, folderPath, fileName); files.Add(info); } } } Trace.TraceInformation("ListFile returning successfully, {0} ", folderPath); return Request.CreateResponse(files); } catch (SessionRemoteException ex) { return GetErrorResponseMessage(ex, folderPath); } })); }
protected override Task <HttpResponseMessage> GetTransportSpecificFileAsync(string folderPath, string fileName, ContentTransferEncoding contentTransferEncoding) { string remotePath = folderPath + "/" + fileName; string temporaryPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) + "\\"; return(Task.Factory.StartNew(() => { if (!this.ValidateController()) { return Request.CreateResponse(HttpStatusCode.BadRequest, this.validationErrors); } try { Directory.CreateDirectory(temporaryPath); using (Session session = new Session()) { HttpResponseMessage response; if ((response = this.OpenSession(session)).StatusCode != HttpStatusCode.OK) { return response; } session.GetFiles(remotePath, temporaryPath).Check(); } TC.FileInfo fileInfo = new TC.FileInfo(this.ServerAddress, folderPath, fileName); TC.File message; // Todo : Change MemoryStream to VirtualFileStream using (MemoryStream stream = new MemoryStream()) { using (FileStream fileStream = System.IO.File.OpenRead(temporaryPath + "/" + fileName)) { stream.SetLength(fileStream.Length); fileStream.Read(stream.GetBuffer(), 0, (int)fileStream.Length); } stream.Position = 0; message = new TC.File(stream, fileInfo, contentTransferEncoding); } Trace.TraceInformation("GetFile returning successfully, {0} , {1} ", folderPath, fileName); return Request.CreateResponse(message); } catch (SessionRemoteException ex) { return GetErrorResponseMessage(ex, remotePath); } catch (IOException ex) { Trace.TraceError("Stacktrace :" + ex.StackTrace); return Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, Resources.ServiceUnavailable); } finally { Directory.Delete(temporaryPath, true); } })); }
/// <summary> /// Upload Util Method for SFTP /// </summary> /// <param name="content"></param> /// <param name="folderPath"></param> /// <param name="fileName"></param> /// <param name="appendIfExist"></param> /// <param name="temporaryFolder"></param> /// <returns></returns> protected override async Task <HttpResponseMessage> UploadTransportSpecificFileAsync(FileContent content, string folderPath, string fileName, bool appendIfExist, string temporaryFolder) { if (!string.IsNullOrWhiteSpace(temporaryFolder) && appendIfExist) { throw new ArgumentException(Resources.InvalidOperationWithTemporaryFolder, "temporaryFolder"); } if (!this.ValidateController()) { return(this.Request.CreateResponse(HttpStatusCode.BadRequest, this.validationErrors)); } string path = folderPath; string temporaryPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) + "\\"; try { Directory.CreateDirectory(temporaryPath); using (Session session = new Session()) { HttpResponseMessage response; if ((response = this.OpenSession(session)).StatusCode != HttpStatusCode.OK) { return(response); } if (string.IsNullOrWhiteSpace(temporaryFolder)) { await this.UploadToFolder(session, content.GetStream(), folderPath, fileName, temporaryPath, appendIfExist); } else { path = temporaryFolder; await this.UploadToFolder(session, content.GetStream(), temporaryFolder, fileName, temporaryPath); string tempPath = temporaryFolder + "/" + fileName; string destinationPath = folderPath + "/" + fileName; if (session.FileExists(destinationPath)) { session.RemoveFiles(destinationPath); } try { session.MoveFile(tempPath, destinationPath); } catch (SessionRemoteException ex) { Trace.TraceError("Stacktrace :" + ex.StackTrace); return(Request.CreateErrorResponse(HttpStatusCode.NotFound, string.Format( CultureInfo.InvariantCulture, Resources.SftpAdapter_NotFound, destinationPath), ex)); } } } TC.FileInfo fileInfo = new TC.FileInfo(this.ServerAddress, folderPath, fileName); Trace.TraceInformation("UploadFile returning successfully, {0} , {1} ", folderPath, fileName); return(Request.CreateResponse(fileInfo)); } catch (SessionRemoteException ex) { return(GetErrorResponseMessage(ex, path)); } catch (PathTooLongException ex) { Trace.TraceError("Stacktrace :" + ex.StackTrace); return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message)); } catch (IOException ex) { Trace.TraceError("Stacktrace :" + ex.StackTrace); return(Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, Resources.ServiceUnavailable)); } finally { Directory.Delete(temporaryPath, true); } }