首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >dotnetzip创建空损坏文件

dotnetzip创建空损坏文件
EN

Stack Overflow用户
提问于 2018-11-29 08:45:52
回答 1查看 371关注 0票数 0

我正在尝试创建一个HTTP触发函数,它将从Azure存储中取出一个blob,将其压缩,然后将zip重新上传到blob存储中。在这条路上的某个地方这是不对的。它成功地压缩和重新上传,但压缩文件有0KB的内容,不能打开。任何帮助都将不胜感激。找到下面的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
        try
        {
          string fileName = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "fileName", true) == 0)
                .Value;

            log.Info($"fileName: {fileName}");

            dynamic request = await req.Content.ReadAsAsync<object>();
            var container = (string)request.body;

            string connectionString = Environment.GetEnvironmentVariable("blobstorageconnectionstring");
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
            CloudBlobClient client = storageAccount.CreateCloudBlobClient();

            MemoryStream outputStream = new MemoryStream();

            using (ZipFile zip = new ZipFile())
            {
                zip.AddEntry($"{fileName}.xlsx", DownloadFromBlobStorage(fileName, connectionString, container));
                zip.CompressionMethod = CompressionMethod.Deflate;
                zip.Save(outputStream);
            }


            UploadToBlobStorage(fileName + "ZIP", outputStream, connectionString, container);

            return req.CreateResponse(HttpStatusCode.OK, "OK");
        }
        catch (Exception ex)
        {
            log.Error("error", ex: ex);

            return req.CreateResponse(HttpStatusCode.BadRequest);
        }

    }
    private static void UploadToBlobStorage(string name, MemoryStream dataStream, string storageConnectionString, string blobContainerName)
    {

        CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
        CloudBlobClient client = account.CreateCloudBlobClient();

        CloudBlobContainer container = client.GetContainerReference(blobContainerName);
        container.CreateIfNotExists();

        CloudBlockBlob blob = container.GetBlockBlobReference(name);
        blob.Properties.ContentType = "application/x-zip-compressed";

        dataStream.Position = 0;
        blob.UploadFromStream(dataStream);
    }
    private static MemoryStream DownloadFromBlobStorage(string fileName, string storageConnectionString, string blobContainerName)
    {

        CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
        CloudBlobClient client = account.CreateCloudBlobClient();

        CloudBlobContainer container = client.GetContainerReference(blobContainerName);
        container.CreateIfNotExists();

        CloudBlockBlob blob = container.GetBlockBlobReference(fileName);

        MemoryStream memStream = new MemoryStream();

        blob.DownloadToStream(memStream);

        return memStream;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-29 09:19:29

似乎您也应该将从MemoryStream返回的DownloadFromBlobStorage()对象定位为零(您已经在UploadToBlobStorage()上使用了outputStream/dataStream ),然后将它传递给zip.AddEntry()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   MemoryStream inputStream = DownloadFromBlobStorage(fileName, connectionString, container);
   inputStream.Position = 0;
   zip.AddEntry($"{fileName}.xlsx", inputStream);

看看这个答案:

Creating Zip file from stream and downloading it - Stack Overflow

经过更多的研究后,我发现通常情况下,在传递一个函数之前,应该先定位一个流:

Who is responsible for stream positioning? - Software Engineering Stack Exchange

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53543818

复制
相关文章
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.4K0
双精度,单精度和半精度
浮点数是计算机上最常用的数据类型之一,有些语言甚至数值只有浮点型(Perl,Lua同学别跑,说的就是你)。
用户1148523
2019/05/27
6K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
Golang中Int32转换为int16丢失精度的具体过程
Int32转换为int16会丢失精度,这是总所周知的,但是具体如何丢失精度的,请看下面的代码:
全栈程序员站长
2022/09/21
2.4K0
Golang中Int32转换为int16丢失精度的具体过程
double转bigDecimal精度问题
double转bigDecimal精度问题 需要用到bigDecimal的字符串构造来转
全栈程序员站长
2022/09/05
2K0
double 转 BigDecimal 精度问题
很明显,经过 double 转 BigDecimal 后,我们最初的值已经发生变化,所以通常我们在做类型转换的时候推荐使用 BigDecimal.valueOf(…);
全栈程序员站长
2022/09/05
1.4K0
double转BigDecimal精度丢失[通俗易懂]
很多人在double或float转BigDecimal时习惯使用BigDecimal的构造方法new BigDecimal(33.33),此种写法会存在精度丢失问题,下面就具体实例带大家体会:
全栈程序员站长
2022/09/05
2.4K0
APP性能测评分析
1.1流畅度相关概念 刷新率 vs 帧率 刷新率:美妙屏幕刷新次数,手机品目的刷新率是60HZ 帧率:GPU在一秒内绘制的帧率
用户10443079
2023/03/21
1.7K0
APP性能测评分析
ChatGPT教你APP性能评测分析
请打开智造喵GPT地址:https://chat.plexpt.com/i/511440
用户10443079
2023/04/25
1.1K0
ChatGPT教你APP性能评测分析
【Qt源码笔记】简要说说 Qt5 中的 HighDPI 支持
想起之前在公司做的关于 HighDPI 的适配,在 Qt4 下可以说是比较繁琐,代码敲到手疼。早就听说 Qt5.6 开始支持了 HighDPI ,一直没机会看详细的代码。一直到开始做 Gal ,才刚好在 Qt5 下需要 HighDPI 支持。用过之后,真的感叹,用起来太方便了。故看了一下详细实现。不过比较遗憾的是代码中有一个小瑕疵。
Harper
2021/07/27
2.9K0
30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient
渐变有三种:QLinearGradient、QConicalGradient 、 QRadialGradient 它们都有一个QGradient父类 QGradient父类的常用公共函数有: void QGradient::setSpread ( Spread method ); //设置填充梯度区域外的区域,参数有: // QGradient::PadSpread :填充区域内最接近的停止颜色。这是默认的。 // QGradient::RepeatSpread : 在区域外继续重复填充 // QGrad
诺谦
2018/07/05
1.8K0
31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待
30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient
诺谦
2018/07/30
2.6K0
31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待
Qt官方示例-K线图
使用Qt的QCandlestickSeries类实现K线图绘制。 0x01 创建K线图 QCandlestickSeries *acmeSeries = new QCandlestickSeries
Qt君
2020/08/04
4.4K0
Qt官方示例-K线图
Qt官方示例-嵌套甜甜圈
  先创建一个QChartView实例并启用抗锯齿。然后从QChartView实例获得一个QChart对象。
Qt君
2020/05/08
1.5K0
Qt官方示例-嵌套甜甜圈
qml类型有那些?
以表格方式列出支持那些类型。 Qml类型与Qt类型对照表 Qml类型 Qt类型 bool bool int unsigned int, int double double real float, qreal string QString url QUrl color QColor font QFont date QDateTime point QPoint, QPointF size QSize, QSizeF rect QRect, QRectF matrix4x4 QMatrix4x4 quaterni
Qt君
2019/08/27
1.5K0
Qt官方示例-图表标注
  标注核心要点:QChart类提供了两种方法来映射场景坐标和系列域(由坐标轴范围定义)。
Qt君
2020/05/08
1.4K0
Qt官方示例-图表标注
Qt for android触摸手势事件QGestureEvent「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197398.html原文链接:https://javaforall.cn
全栈程序员站长
2022/10/03
1.8K0
qt将毫秒级时间戳转换为日期(js把对象变成字符串)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128759.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/28
6.7K0
Qt官方示例-极坐标图
  轴的创建与笛卡尔图表相似,但是将轴添加到图表时,可以使用极坐标方向而不是对齐方式。
Qt君
2020/03/19
3.3K0
Qt官方示例-极坐标图
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
21.2K0

相似问题

无法将双精度转换为双精度

22

如何将双精度*转换为双精度?

60

将0.0转换为双精度有什么问题?

52

将C++双精度转换为DEC双精度

35

如何将sql datetime2转换为双精度?

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文