Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 不使用azcopy跨Azure容器复制文件_.net_Azure_Spring Boot - Fatal编程技术网

.net 不使用azcopy跨Azure容器复制文件

.net 不使用azcopy跨Azure容器复制文件,.net,azure,spring-boot,.net,Azure,Spring Boot,我想在不使用azcopy实用程序的情况下跨Azure容器复制文件。 请帮助编写脚本(Spring boot或.net示例) 我能够将文件从\上传\下载到本地从\上传到容器。 现在想知道,我如何实现远程到远程复制 using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Microsoft.Azure.Storage.Blob; using System; using System.IO; using System.Thr

我想在不使用azcopy实用程序的情况下跨Azure容器复制文件。 请帮助编写脚本(Spring boot或.net示例)

我能够将文件从\上传\下载到本地从\上传到容器。 现在想知道,我如何实现远程到远程复制

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Microsoft.Azure.Storage.Blob;
using System;
using System.IO;
using System.Threading.Tasks;

namespace whizlabblob
{
    class Program
    {
        static string storageconnstring = "DefaultEndpointsProtocol=https;AccountName=mainices;AccountKey=********************";
        static string containerName = "demo";
        static string filename = "sample.txt";
        static string filepath="C:\\Work\\sample.txt";
        static string downloadpath = "C:\\Work\\sample2.txt";
        static async Task Main(string[] args)
        {
            //Container().Wait();
            //CreateBlob().Wait();
            //GetBlobs().Wait();
            // GetBlob().Wait();
            Console.WriteLine("Complete");
            Console.ReadKey();
        }

        static async Task Container()
        {
         
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
         
            BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
        }



        static async Task CreateBlob()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            BlobClient blobClient = containerClient.GetBlobClient(filename);            
            using FileStream uploadFileStream = File.OpenRead(filepath);
            

            await blobClient.UploadAsync(uploadFileStream, true);
            uploadFileStream.Close();
        }


        static async Task GetBlobs()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            
            await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
            {
                Console.WriteLine("\t" + blobItem.Name);
            }

        }

        static async Task GetBlob()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            BlobClient blob = containerClient.GetBlobClient(filename);
            
            BlobDownloadInfo blobdata = await blob.DownloadAsync();

            
            using (FileStream downloadFileStream = File.OpenWrite(downloadpath))
            {
                await blobdata.Content.CopyToAsync(downloadFileStream);
                downloadFileStream.Close();
            }


            // Read the new file
            using (FileStream downloadFileStream = File.OpenRead(downloadpath))
            {
                using var strreader = new StreamReader(downloadFileStream);
                string line;
                while ((line = strreader.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }

        }
    }
}
下面的代码工作正常。我现在只需要远程拷贝

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Microsoft.Azure.Storage.Blob;
using System;
using System.IO;
using System.Threading.Tasks;

namespace whizlabblob
{
    class Program
    {
        static string storageconnstring = "DefaultEndpointsProtocol=https;AccountName=mainices;AccountKey=********************";
        static string containerName = "demo";
        static string filename = "sample.txt";
        static string filepath="C:\\Work\\sample.txt";
        static string downloadpath = "C:\\Work\\sample2.txt";
        static async Task Main(string[] args)
        {
            //Container().Wait();
            //CreateBlob().Wait();
            //GetBlobs().Wait();
            // GetBlob().Wait();
            Console.WriteLine("Complete");
            Console.ReadKey();
        }

        static async Task Container()
        {
         
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
         
            BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
        }



        static async Task CreateBlob()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            BlobClient blobClient = containerClient.GetBlobClient(filename);            
            using FileStream uploadFileStream = File.OpenRead(filepath);
            

            await blobClient.UploadAsync(uploadFileStream, true);
            uploadFileStream.Close();
        }


        static async Task GetBlobs()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            
            await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
            {
                Console.WriteLine("\t" + blobItem.Name);
            }

        }

        static async Task GetBlob()
        {
            
            BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
            
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            
            BlobClient blob = containerClient.GetBlobClient(filename);
            
            BlobDownloadInfo blobdata = await blob.DownloadAsync();

            
            using (FileStream downloadFileStream = File.OpenWrite(downloadpath))
            {
                await blobdata.Content.CopyToAsync(downloadFileStream);
                downloadFileStream.Close();
            }


            // Read the new file
            using (FileStream downloadFileStream = File.OpenRead(downloadpath))
            {
                using var strreader = new StreamReader(downloadFileStream);
                string line;
                while ((line = strreader.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }

        }
    }
}
你就快到了:)。为了将blob从一个容器复制到另一个容器,您只需要为目标容器中的blob创建
BlobClient
的实例,并调用方法并传递源blob的URI

下面是执行此操作的代码:

    static async Task CopyBlob()
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        BlobClient blobClient = containerClient.GetBlobClient(filename);
        var blobUri = blobClient.Uri;

        BlobContainerClient targetContainerClient = blobServiceClient.GetBlobContainerClient("demo-copy");//This is the container where we want to copy the blob
        BlobClient targetBlobClient = targetContainerClient.GetBlobClient(filename);
        await targetBlobClient.StartCopyFromUriAsync(blobUri);
    }
需要记住的几件事:

  • 因为要在同一存储帐户中复制blob,所以只需要源blob的URI。但是,如果要跨存储帐户复制blob,则需要确保提供给copy方法的URI应该是可公开访问的
  • 同样,由于要在同一存储帐户中复制blob,因此服务器端复制操作是同步的。如果要跨存储帐户复制blob,则该操作是异步的,可能需要一些时间才能完成。在对源blob执行任何操作(如删除)之前,必须等待复制操作完成

请分享您迄今为止的尝试以及遇到的问题。添加。。谢谢你,高拉夫。。你是个救生员。。它就像一个符咒。然而,我有一个更大的问题。。我是一名java微服务人员。。我不太清楚。。有两个挂起的任务。。一个在执行时-我想要新处理文件的URL。。(我想这很容易)。。第二。。现在它正在本地工作。。我想远程运行它。。我知道这些对你来说一定是很小的任务。。但你们能指导我吗?当我试图运行与Azure函数完全相同的代码时。。我收到此错误-2020-06-26T13:16:29Z[error]run.csx(8,1):错误CS7021:无法在脚本代码2020-06-26T13:17:17Z[error]run.csx(57,13):错误CS0246:找不到类型或命名空间名称“BlobClient”(是否缺少using指令或程序集引用?)请查看此链接以了解错误:。我相信您需要在.Net类库中使用C#,而不是在Azure函数中使用C#脚本。您可以在此处阅读更多信息:。可以将其看作是一个编译的v/s解释代码(这不是一个很好的类比,但类似于JavaV/s JavaScript)。因此,您的C#函数代码被编译。这是您在VisualStudio中编写的,编译代码,然后部署二进制文件。C#脚本代码是您直接在Azure Portal中编写的代码。即使是我也不太熟悉C#脚本代码。我只为Azure函数编写了C#编译代码。嗯。