Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将blob从一个容器复制到另一个容器时出错,C#中的最终内容为0字节

将blob从一个容器复制到另一个容器时出错,C#中的最终内容为0字节
EN

Stack Overflow用户
提问于 2022-03-01 12:07:10
回答 1查看 386关注 0票数 0

我正在进行一个项目,将blob从一个容器移动到另一个容器,使用C#的azure函数,我尝试了不同的方法将文件从一个容器复制到另一个容器,但是只能移动名称和扩展名,但是当下载或试图访问文件时,内容是0字节。

这是当前实现的代码。

代码语言:javascript
运行
AI代码解释
复制
namespace TestInput
{
    [StorageAccount ("BlobConnectionString")]
    public class TestInput
    {
        [FunctionName("TestInput")]
        public static void Run(
            [BlobTrigger("test/{name}")] Stream myBlob,
            [Blob("testoutput/{name}", FileAccess.Write)] Stream outputBlob,
            string name,
            
                            ILogger log)
        {
            
            var accountName = Environment.GetEnvironmentVariable("AccountName");
            var accountKey = Environment.GetEnvironmentVariable("AccountKey");
            var cred = new StorageCredentials(accountName, accountKey);
            var account = new CloudStorageAccount(cred, true);
            var client = account.CreateCloudBlobClient();
            var sourceContainer = client.GetContainerReference("test");
            var sourceBlob = sourceContainer.GetBlockBlobReference($"{name}");
            var destinationContainer = client.GetContainerReference("testoutput");
            var destinationBlob = destinationContainer.GetBlockBlobReference($"{name}");
            destinationBlob.UploadFromStream(myBlob);
            sourceBlob.Delete(DeleteSnapshotsOption.IncludeSnapshots);
            
        }
    }

}

如果你能告诉我如何解决这个问题,或者我错过了什么参数,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-03-31 08:34:44

请检查以下代码是否有助于使用Azure函数将blob从一个容器复制到另一个容器:

下面是Blob触发器类型的.NET 6 Azure函数:

代码语言:javascript
运行
AI代码解释
复制
using System;
using System.IO;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace KrishBlobTriggerAF1205
{
    public class Function1
    {
        [FunctionName("Function1")]
        public async Task RunAsync([BlobTrigger("dev/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log,
            [Blob("staging/{name}", FileAccess.Write)] Stream outputBlob)
        {
            var srcconnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
            string sourceContainer = "source";
            string targetContainer = "target";
            string blobName = "blob-name.txt";


            BlobServiceClient serviceClient = new BlobServiceClient(srcconnectionString);
            BlobContainerClient sourceContainerClient = serviceClient.GetBlobContainerClient(sourceContainer);
            BlobContainerClient targetContainerClient = serviceClient.GetBlobContainerClient(targetContainer);
            BlobClient sourceBlobClient = sourceContainerClient.GetBlobClient(blobName);
            BlobClient targetBlobClient = targetContainerClient.GetBlobClient(blobName);
            log.LogInformation("Sending copy blob request....");
            var result = await targetBlobClient.StartCopyFromUriAsync(sourceBlobClient.Uri);
            log.LogInformation("Copy blob request sent....");
            log.LogInformation("============");
            bool isBlobCopiedSuccessfully = false;
            do
            {
                log.LogInformation("Checking copy status....");
                var targetBlobProperties = await targetBlobClient.GetPropertiesAsync();
                log.LogInformation($"Current copy status = {targetBlobProperties.Value.CopyStatus}");
                if (targetBlobProperties.Value.CopyStatus.Equals(CopyStatus.Pending))
                {
                    System.Threading.Thread.Sleep(1000);
                }
                else
                {
                    isBlobCopiedSuccessfully = targetBlobProperties.Value.CopyStatus.Equals(CopyStatus.Success);
                    break;
                }
            } while (true);

            if (isBlobCopiedSuccessfully)
            {
                log.LogInformation("Blob copied successfully. Now deleting source blob...");
                await sourceBlobClient.DeleteAsync();
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71314080

复制
相关文章
SQLite 创建表的方法
SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
用户4988085
2021/09/17
2.5K0
ABAP 取两个内表的交集 比较两个内表的不同
SAP自带的函数: CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES; 似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分) 但是,具体的使用,还请有经验的朋友不吝赐教啊! 因为,我在测试数据时,发现这两个函数的效果不那么简单。 如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。 所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅: *" IMPORTING *" VALUE(ITAB1) TYPE INDEX TABLE *" VALUE(ITAB2) TYPE INDEX TABLE *" EXPORTING *" VALUE(ITABSAME) TYPE INDEX TABLE *"---------------------------------------------------------------------- field-symbols: <S1>, <S2>. data: L1 type i, L2 type i. assign local copy of initial line of: ITAB1 to <S1>, ITAB2 to <S2>. describe: table ITAB1 lines L1, table ITAB2 lines L2. "对记录行数少的内表,执行第一层循环; "在第二层循环中,找到对应记录,即可追加到结果内表; "同时退出第二层循环,继续执行第一层循环的下一行 IF L1 <= L2. LOOP AT ITAB1 INTO <S1>. LOOP AT ITAB2 INTO <S2>. IF <S1> EQ <S2>. APPEND <S1> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ELSE. LOOP AT ITAB2 INTO <S2>. LOOP AT ITAB1 INTO <S1>. IF <S1> EQ <S2>. APPEND <S2> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ENDIF. ENDFUNCTION. 另一个问题,想请教大家,在上面代码里,第二层循环是为了找出,第一层循环的当前记录,在第二个内表里是否存在;
matinal
2020/11/26
3.2K0
activiti表的创建和简单示例
周杰伦本人
2023/10/12
2860
activiti表的创建和简单示例
比EntityFramework简单很多的SOD框架动态创建表的方法
今天看到一篇博文EntityFramework Core如何映射动态模型? ,文章讲的是如何用EF动态创建表的问题,比如根据时间动态创建一个表,这种场景常出现在应用系统的日志记录功能中。原文用EF实现非常复杂,相比而言,SOD框架就要简单很多。
用户1177503
2021/02/02
8920
SQL2012_创建架构,复合主键,主表,从表的创建方法。
创建架构,复合主键,主表,从表的创建方法。 create schema XIXI--创建架构 create table XIXI.U( id int not null , s_id int not null, u_id int constraint PK_ID primary key(id,s_id,u_id)--创建复合主键 ) create table XIXI.O(--主表 id int constraint PK_OK primary key, ) cre
赵腰静
2018/03/09
2K0
临时表创建_临时表的创建方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
3.4K0
SQL2012_创建架构,复合主键,主表,从表的创建方法。
创建架构,复合主键,主表,从表的创建方法。 create schema XIXI--创建架构 create table XIXI.U( id int not null , s_id int not null, u_id int constraint PK_ID primary key(id,s_id,u_id)--创建复合主键 ) create table XIXI.O(--主表 id int constraint PK_OK primary key, ) cre
赵腰静
2018/03/09
1.7K0
Greenplum 查看最新创建的表及大小
说明 最近发现GP中空间增长比较快,为了能更好的发现GP中一段时间内增长的表及大小 实现的SQL select pt.schemaname||'.'||ts.relname as tablename, pg_relation_size(pt.schemaname||'.'||ts.relname)/1024/1024/1024 as tablesizegb, ts.stausename,ts.stasubtype,ts.statime from ( SELECT ps.stausename,ps.st
小徐
2020/02/10
7750
Greenplum 查看最新创建的表及大小
Greenplum 查看最新创建的表及大小 说明 最近发现GP中空间增长比较快,为了能更好的发现GP中一段时间内增长的表及大小 实现的SQL select pt.schemaname||'.'||ts.relname as tablename, pg_relation_size(pt.schemaname||'.'||ts.relname)/1024/1024/1024 as tablesizegb, ts.stausename,ts.stasubtype,ts.statime from ( SELECT
小徐
2019/12/27
1.3K0
Greenplum 查看最新创建的表及大小
SQL处理表结构的基本方法整理(创建表,关联表,复制表)
方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表
学到老
2019/02/14
9760
SQL处理表结构的基本方法整理(创建表,关联表,复制表)
复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2 即:让WHERE条件不成立. 方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表 复制旧表的数据到新表(假设两个表结构一样) INSERT INTO 新表 SELECT * FROM 旧表 复制旧表的数据到新表(假设两个表结构不一样) INSERT INTO 新表(字段1,字
学到老
2018/03/19
1.8K0
MySQL异步删除大表的方法
在MySQL中有大表需要清理,该表超过100GB,不敢直接delete或者truncate、drop,怕影响业务。
胖五斤
2022/11/10
4.6K0
Hive 中内部表与外部表的区别与创建方法
先来说下Hive中内部表与外部表的区别: Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否 符合schema的,hive 遵循的是 s
用户1177713
2018/02/24
2.6K0
【求助】从大表中删除小表中存在的记录问题
A表:30万,主键ID B表:300万,主键ID 从B表中删除ID=A表ID的记录。 DELETE FROM B WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM (SELECT T.ID, ROWNUM RN FROM A) WHERE RN > 0 AND RN <= 50000) AB WHERE A.ID = B.ID); 但执行计划显示COST较大,且瓶颈是B表的全表扫描。 需求是这里有B1 ... B10多个B表(都是300万),串行操作
bisal
2019/01/29
5.3K0
数据库中创建表的语句_创建基本表学生表的sql语句
在线Sqlite查看器|修改器 http://lzltool.com/sqlite-viewer
全栈程序员站长
2022/11/02
5.1K0
SQL语句中创建表的语句_用sql创建表
连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)
全栈程序员站长
2022/11/03
4.8K0
SQL语句中创建表的语句_用sql创建表
怎么创建数据表_sqlserver创建表的sql语句
知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。
全栈程序员站长
2022/11/17
3.3K0
怎么创建数据表_sqlserver创建表的sql语句
EX-VBA:迄今为止最简单的Excel工作表密码解除方法
Step-01:通过菜单【开发工具】-【Visual Basic】进入VBA编辑界面
大海Power
2021/08/30
7.3K0
点击加载更多

相似问题

从OleDB更新DataTable表的最简单方法

22

使用Zend_Pdf创建表的最简单方法

44

从两个不同的表创建表

23

创建大表的有效方法

10

从两个不同的表sql创建表

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档