标签: memorystream

如何从 Asp.Net Core 中的 IActionResult 以 Excel 文件形式返回 MemoryStream

我正在开展一个Asp.Net Core目标项目.Net 5

我有这个ActionResult

     public async Task<ActionResult> ExportMarksForm(int testId)
            {
                var stream = new MemoryStream();
                // Some logic to Save the workbook as stream

                return File(stream, "application/ms-excel", "xxx.xlsx");
            }
Run Code Online (Sandbox Code Playgroud)

问题: 一切正常,但当我下载文件时,我收到一条 Excel 消息,告诉我文件已损坏,这意味着发生了错误或文件写入操作未完成。

我尝试了断点,发现变量streambytes.

那么,请问我该如何解决这个问题?或者如果有任何其他解决方案可以将 astream作为 Excel 文件返回,请与我分享。提前致谢。

c# memorystream asp.net-core asp.net5 .net-5

5
推荐指数
1
解决办法
5247
查看次数

从MemoryStream打开音频(wav)文件以确定持续时间

有没有办法,在框架内或使用P/Invoke来确定在MemoryStream中保存的wav文件的持续时间?

我已经看过Managed DirectX和另一个类似的问题,但是一切似乎都适用于路径,而不是提供任何传递流的方法.我引用的问题中的一个链接(一个简单的C#Wave编辑器 ......)非常清楚我可以解析MemoryStream以确定wav文件的持续时间.理想情况下,我不想重新发明轮子.

c# audio memorystream stream wav

4
推荐指数
1
解决办法
7576
查看次数

使用BinaryFormatter反序列化序列化数据时的异常

我使用BinaryFormatter和a MemoryStream来序列化一个对象,然后将它作为二进制blob存储在数据库中.然后,我从数据库中检索数据,并使用binaryformatter和内存流进行反序列化.

但是,当我尝试反序列化对象时,我经常会抛出异常.最值得注意的'an object with the same key already exists'还是'cannot convert string to int64'

有没有人知道为什么反序列化掷骰子?或者如何找出哪些字典对象有麻烦?

我的序列化功能如下......

private byte[] SerializeUserData(UserData ud)
{
    byte[] data = null;
    using (MemoryStream ms = new MemoryStream())
    {
        ms.Seek(0, SeekOrigin.Begin);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, ud);
        data = ms.ToArray();
    }
    return data;
}

private UserData Deserialize()
{
    UserData ud = null;
    using (MemoryStream ms = new MemoryStream(mSession.BinarySession))
    {
        BinaryFormatter bf = new BinaryFormatter();
        ud = bf.Deserialize(ms) as UserData;
    } …
Run Code Online (Sandbox Code Playgroud)

c# serialization memorystream binaryformatter

4
推荐指数
1
解决办法
3998
查看次数

如何在浏览器中打开MemoryStream文件?

我想在我的Web应用程序中的代码隐藏文件中创建一个Text文件.但是,我不允许将此文件保存到服务器.所以我尝试使用MemoryStream类将我的文件保存到内存中.到目前为止,我有,

MemoryStream memoryStream = new MemoryStream();
TextWriter textWriter     = new StreamWriter(memoryStream);
textWriter.WriteLine("Something");
memoryStream.Close();
Run Code Online (Sandbox Code Playgroud)

它似乎工作但我的要求是当他/她点击按钮时在客户端浏览器上打开此文件.由于此文件没有像..../text.txt这样的物理路径.我不知道如何在浏览器上打开它.

如何使用C#在ASP.Net中执行此操作.我搜索了很多,但找不到适合我的解决方案.

提前致谢.

c# asp.net memorystream

4
推荐指数
1
解决办法
9488
查看次数

将TMemoryStream转换为variant

如何将TMemoryStream的内容转换为变体?我使用的是Delphi 2010.

TMemoryStream存储文件的内容,它可以是PDF或JPG(扫描文档).

文件保存在MS SQL基础中.当我在程序中进入编辑模式时,我将该文件的内容从base提取到TMemoryStream中.

编辑完文件卡后,我需要将文件发回基地.扫描文件也可以更改(或替换为其他文件).要记录回来,我使用带有一堆参数的存储过程 - 每个字段一个.我将参数作为变量传递给存储过程.

这就是我需要将TMemoryStream转换为变体的原因.

delphi memorystream variant

4
推荐指数
1
解决办法
2834
查看次数

读取时数据从内存流中截断

我有以下代码StreamWriter用于写入MemoryStream.但是,当我尝试回读流时,我得到了截断数据:

using(var outStream = new MemoryStream())
using (var outWriter = new StreamWriter(outStream))
{
    // my operation that's writing data to the stream

    var outReader = new StreamReader(outStream);
    outStream.Flush();
    outStream.Position = 0;
    return outReader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

}

这将返回大部分数据,但会在结尾处截断.但是,我知道数据正在进入流,因为如果我尝试写入文件而不是MemoryStream我获取整个内容.例如,此代码将整个内容写入文件:

using (var outWriter = new StreamWriter(@"C:\temp\test.out"))
{
    // my operation that's writing data to the stream
}
Run Code Online (Sandbox Code Playgroud)

.net c# io memorystream stream

4
推荐指数
1
解决办法
1479
查看次数

C#如何使用MemoryStream进行多线程处理

我目前的代码是:

public static byte[] ImageToByte(Image img)
{

        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            stream.Close();
            byteArray = stream.ToArray();
        }


        return byteArray;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个工作与多线程,或使用我的CPU的每个核心,使其更快?

c# multithreading memorystream

4
推荐指数
1
解决办法
4023
查看次数

从内存流中读取存储的PDF

我正在使用C#和SQLServer 2012开发数据库项目.在我的一个表单中,我有一个PDF文件,其中包含一些存储在表中的其他信息.这是成功的,但当我想检索存储的信息时,我有一个显示PDF文件的问题,因为我无法显示它,我不知道如何显示它.

我读过一些文章说它无法用内存流中的Adobe PDF查看器显示,有什么办法吗?

这是我从数据库中检索数据的代码:

            sql_com.CommandText = "select * from incoming_boks_tbl where [incoming_bok_id]=@incoming_id and [incoming_date]=@incoming_date";
            sql_com.Parameters.AddWithValue("incoming_id",up_inco_num_txt.Text);
            sql_com.Parameters.AddWithValue("incoming_date", up_inco_date_txt.Text);
            sql_dr = sql_com.ExecuteReader();
            if(sql_dr.HasRows)
            {
                while(sql_dr.Read())
                {
                    up_incoming_id_txt.Text = sql_dr[0].ToString();
                    up_inco_num_txt.Text = sql_dr[1].ToString();
                    up_inco_date_txt.Text = sql_dr[2].ToString();
                    up_inco_reg_txt.Text = sql_dr[3].ToString();
                    up_inco_place_txt.Text = sql_dr[4].ToString();
                    up_in_out_txt.Text = sql_dr[5].ToString();
                    up_subj_txt.Text = sql_dr[6].ToString();
                    up_note_txt.Text = sql_dr[7].ToString();
                    string file_ext = sql_dr[8].ToString();//pdf file extension
                    byte[] inco_file = (byte[])(sql_dr[9]);//the pdf file
                    MemoryStream ms = new MemoryStream(inco_file);
                    //here I don't know what to do with memory stream file data and where …
Run Code Online (Sandbox Code Playgroud)

.net c# pdf memorystream

4
推荐指数
1
解决办法
1万
查看次数

尝试在 C# 中读取 Excel 文件文件流,我得到的是数字而不是文本

我正在尝试使用 DocumentFormat.OpenXml 来读取上传的 Excel 文件。当我获取文件 (HttpPosteFileWrapper) 时,我只是尝试读取单元格并将它们写入文本字符串。(稍后我会做更多,但我现在只是想习惯 OpenXml。)

我在 Excel 中的数据如下所示:

Field1 - Field2 - 电话 - 城市
IT 部门 - Emp - 7175551234 - Springfield
HR - Emp - 7175556543 - W Springfield

代码如下所示:

var doc = SpreadsheetDocument.Open(file.InputStream, false);
WorkbookPart workbookPart = doc.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData thisSheet = worksheetPart.Worksheet.Elements<SheetData>().First();
System.Text.StringBuilder text = new System.Text.StringBuilder();
foreach (Row r in thisSheet.Elements<Row>())
{
    foreach (Cell c in r.Elements<Cell>())
    {
        text.Append(c.CellValue.Text + ",");
    }
    text.AppendLine();
}
Run Code Online (Sandbox Code Playgroud)

它创建的字符串如下所示:

49,51,50,0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,14,15,17,18,19,20,21, 22,40,41,42,43,44,45,54,\r\n
52,24,23,25,26,27,7306,33,28,29,30,31,17033,32,34, 7175555555,7175551234,7175554321,7175550000,35,36,37,36526,40179,38,39,30,31,17033,32,55,\r\n …

c# excel memorystream openxml

4
推荐指数
2
解决办法
3055
查看次数

在内存中创建 Zip Archive,并从 web api 返回它

所以我正在尝试创建一个 zip 存档并从我的 web api 返回它。从 angular 2 站点调用控制器。当前 zip 文件已创建,但当我打开它时,我收到一条无效消息。最初我在 using 语句中有流,但必须更改它,因为它们在请求完成之前被处理。

我需要的是创建 zip 文件,将 csv 文件添加到其内容中。然后返回zip文件。但是 zip 文件总是无效的。我已经阅读了需要处理 zip 存档才能写入其内容的内容,但是我不确定实现此目的的最佳方法是什么。感谢您的任何指导。

public async Task<IHttpActionResult> ExportReport(int id, ReportModel report)
    {
        try
        {
            var result = await ReportGenerationService.ExportReportForId(id, report.Page, report.PageSize, report.SortField, report.SortDir, report.SearchTerm, report.StartDate, report.EndDate, report.UserId, report.TeamId, report.SelectedDateItem);
            if (result != null)
            {

                var compressedFileStream = new MemoryStream();

                var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Update, false);

                var zipEntry = zipArchive.CreateEntry("textExport.csv");
                var origionalFileSteam = new MemoryStream(result.ExportToBytes());
                var zipEntryStream = zipEntry.Open();
                origionalFileSteam.CopyTo(zipEntryStream);


                var response …
Run Code Online (Sandbox Code Playgroud)

.net c# memorystream asp.net-web-api2

4
推荐指数
2
解决办法
4104
查看次数