我正在开展一个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 消息,告诉我文件已损坏,这意味着发生了错误或文件写入操作未完成。
我尝试了断点,发现变量stream有bytes.
那么,请问我该如何解决这个问题?或者如果有任何其他解决方案可以将 astream作为 Excel 文件返回,请与我分享。提前致谢。
有没有办法,在框架内或使用P/Invoke来确定在MemoryStream中保存的wav文件的持续时间?
我已经看过Managed DirectX和另一个类似的问题,但是一切似乎都适用于路径,而不是提供任何传递流的方法.我引用的问题中的一个链接(一个简单的C#Wave编辑器 ......)非常清楚我可以解析它MemoryStream以确定wav文件的持续时间.理想情况下,我不想重新发明轮子.
我使用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) 我想在我的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中执行此操作.我搜索了很多,但找不到适合我的解决方案.
提前致谢.
如何将TMemoryStream的内容转换为变体?我使用的是Delphi 2010.
TMemoryStream存储文件的内容,它可以是PDF或JPG(扫描文档).
文件保存在MS SQL基础中.当我在程序中进入编辑模式时,我将该文件的内容从base提取到TMemoryStream中.
编辑完文件卡后,我需要将文件发回基地.扫描文件也可以更改(或替换为其他文件).要记录回来,我使用带有一堆参数的存储过程 - 每个字段一个.我将参数作为变量传递给存储过程.
这就是我需要将TMemoryStream转换为变体的原因.
我有以下代码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) 我目前的代码是:
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#和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) 我正在尝试使用 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 …
所以我正在尝试创建一个 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)