public RemoteFileInfo DownloadFile(DownloadRequest request) { try { // get some info about the input file var filePath = Path.Combine("Upload", request.FileName); var fileInfo = new FileInfo(filePath); // report start _log.Info("Sending stream " + request.FileName + " to client - Size: " + fileInfo.Length + " - " + Utility.GetMethodDescription()); Console.WriteLine(@"Sending stream " + request.FileName + @" to client"); Console.WriteLine(@"Size " + fileInfo.Length); // check if exists if (!fileInfo.Exists) throw new FileNotFoundException("File not found", request.FileName); // open stream var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); // return result var result = new RemoteFileInfo {FileName = request.FileName, Length = fileInfo.Length, FileByteStream = stream}; return result; } catch (Exception ex) { _log.Error("Errore nel download del file: " + Utility.GetMethodDescription() + " - fileName:" + request.FileName, ex); throw; } }
public void UploadFile(RemoteFileInfo request) { try { // report start _log.Info("Start uploading " + request.FileName + " to client - Size: " + request.Length + " - " + Utility.GetMethodDescription()); // create output folder, if does not exist if (!Directory.Exists("Upload")) Directory.CreateDirectory("Upload"); // kill target file, if already exists var filePath = Path.Combine("Upload", request.FileName); if (File.Exists(filePath)) File.Delete(filePath); const int chunkSize = 2048; var buffer = new byte[chunkSize]; using (var writeStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write)) { do { // read bytes from input stream int bytesRead = request.FileByteStream.Read(buffer, 0, chunkSize); if (bytesRead == 0) break; // write bytes to output stream writeStream.Write(buffer, 0, bytesRead); } while (true); // report end _log.Info("Upload terminato - " + Utility.GetMethodDescription()); writeStream.Close(); } } catch (Exception ex) { _log.Error("Errore nell'upload del file: " + Utility.GetMethodDescription() + " - fileName:" + request.FileName, ex); throw; } }