Как скопировать zip-файл на удаленный сервер, используя FileStream? - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь скопировать zip-файл в местоположение на удаленном сервере, используя поток файлов, ниже приведен мой веб-метод:

[WebMethod]
public void SavePackage(string args = "{}")
{
    FileStream fs = new FileStream(@"c:\temp\abc.zip", FileMode.Open, FileAccess.Read);
    byte[] byteData = new byte[fs.Length];
    fs.Read(byteData, 0, System.Convert.ToInt32(fs.Length));
}

, но я не знаю, как записать byteData в назначение в виде zip-файла.

до того, как я использовал метод File.Copy, но он не работает для удаленного сервера.

Ответы [ 4 ]

0 голосов
/ 18 июля 2018

После поиска во многих блогах я обнаружил, что нам нужен какой-то клиентский элемент управления, который взаимодействует с клиентским компьютером.Поэтому я использовал общий путь для загрузки этого файла в место назначения, а не какой-либо случайный путь в моем случае «c: \ temp \ abc.zip».

Ниже приведен мой WebMethod для выполнения этой задачи.

[WebMethod]
public string SavePackage(string args = "{}")
{
    try
    {
        // here i am accepting json args as parameter
        string sourcePath = string.Empty, type = string.Empty, category = string.Empty, description = string.Empty, additionalComments = string.Empty;
        var jsonargs = (JObject)JsonConvert.DeserializeObject(args);

        if (jsonargs.Count == 0)
        {
            return "{'message':'No parameters', 'status':'404'}";
        }

        foreach (var item in jsonargs)
        {
            sourcePath = (item.Key.ToLower() != "sourcepath" || !string.IsNullOrEmpty(sourcePath)) ? sourcePath : item.Value.ToString().Replace(@"""", "").Replace(@"\\", @"\"); // shared path
            type = (item.Key.ToLower() != "type" || !string.IsNullOrEmpty(type)) ? type : item.Value.ToString().Replace(@"""", "");
            category = (item.Key.ToLower() != "category" || !string.IsNullOrEmpty(category)) ? category : item.Value.ToString().Replace(@"""", "");
            description = (item.Key.ToLower() != "description" || !string.IsNullOrEmpty(description)) ? description : item.Value.ToString().Replace(@"""", "");
            additionalComments = (item.Key.ToLower() != "additionalcomments" || !string.IsNullOrEmpty(additionalComments)) ? additionalComments : item.Value.ToString().Replace(@"""", "");
        }

        if (!Path.GetExtension(sourcePath).Equals(".zip"))
        {
            return "{'message':'File source path is not in a zip format', 'status':'404'}";
        }

        var filename = sourcePath.Remove(0, sourcePath.LastIndexOf("\\", StringComparison.Ordinal) + 1);    
        var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
        Directory.CreateDirectory(tempDir);
        var destPath = Path.Combine(tempDir, filename);
        File.Copy(sourcePath, destPath, true);

        if (!File.Exists(destPath))
        {
            return "{'message':'File not copied', 'status':'404'}";
        }

        return "{'message':'OK', 'status':'200'}";
    }
    catch (Exception ex)
    {
        return "{'message':'error', 'status':'404'}";
    }
}
0 голосов
/ 06 июня 2018
using (var outStream = new FileStream(somePath, FileMode.Write))
{
   using (var inStream = new FileStream(localPath, FileMode.Read))
   {
        inStream.CopyTo(outStream);
   }
}
0 голосов
/ 06 июня 2018

System.IO.File.Copy в порядке, но обязательным условием является то, что ваш компьютер имеет право на доступ к месту назначения.

Один из наиболее удобных способов проверки - это найти сетевой диск с общим доступом, а затемскопируйте свой файл туда.т.е.

File.Copy(@"c:\temp\MyFile.txt", @"\\server\folder\Myfile.txt", true);
0 голосов
/ 06 июня 2018

вы можете использовать BinaryWriter.Смотрите этот код:сначала добавьте это пространство имен: используя System.IO

   var bytes = File.ReadAllBytes("YOUR_SOURCE_PATH");

   BinaryWriter writer = new BinaryWriter(File.OpenWrite("DESTINATION_PATH.zip"));

   writer.Write(bytes);

Учтите, что при чтении данных файла в виде байтового массива не имеет значения расширение файла.

...