使用DocX librairy时,我在服务器上生成docx文档,然后下载它。
为此,我需要以字节数组转换我的文档。
为此,我以前将文档保存为这样的物理文件:
---
title: some title
author: some author
date: 'some date'
slug: some-slug
categories:
- some category
tags:
- some-tag
output:
blogdown::html_page:
toc: true
number_sections: true
toc_depth: 2
---
![](/post/img/some_img.png)
但我宁愿不这样做。是否可以序列化此对象以下载它而不保存它?
我已经尝试过了:
// Save all changes to this document.
document.SaveAs(GENERATED_DOCX_LOCATION);
return System.IO.File.ReadAllBytes(GENERATED_DOCX_LOCATION);
使用:
private byte[] ObjectToByteArray(object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
但显然,DocX没有实现ISerializable。
编辑:以下代码无效
return this.ObjectToByteArray(document);
答案 0 :(得分:1)
试试这个,用我的文档位置替换我的c:\ temp ...路径,这将从字节数组中获取并写入文件
void Main()
{
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\temp\test.csv");
using (var bw = new BinaryWriter(File.Open(@"C:\temp\test2.csv", FileMode.OpenOrCreate)))
{
bw.Write(bytes);
bw.Flush();
}
}
答案 1 :(得分:0)
无法通过原始DocX库进行此操作。
这是一个遗憾,因为这个库使用MemoryStream来处理数据。
要解决我的问题,我只需添加一个新的public readonly属性来公开私有的MemoryStream变量,然后我使用了这个简单的代码:
DocX项目中添加的代码:
public MemoryStream DocumentMemoryStream { get { return this.memoryStream; } }
我的主要功能代码:
return document.DocumentMemoryStream.ToArray();