如果我有一个 MemoryStream,我知道我向该 MemoryStream 发送了多个文件(示例 5 个文件)。是否可以从此 MemoryStream 读取数据并逐个文件地分解?
我的直觉告诉我不,因为当我们阅读时,我们正在逐字节阅读......任何帮助和可能的片段都会很棒。我在谷歌或这里找不到任何东西:(
我正在尝试编写从MemoryStream. 这是我到目前为止所拥有的 -
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
// CREATE XML
}
Run Code Online (Sandbox Code Playgroud)
然后我想获取该流,并将其保存到压缩文件中。我见过很多使用 GZipStream 的示例,但没有一个与此完全匹配。
我正在尝试将 Android 设备上的 .jpg 文件发送到我的服务器计算机。
为此,我通过 java android 应用程序将图片转换为字节数组,并将其作为参数发送到我的服务器计算机。我通过网络服务调用来完成此操作。
编辑第一个函数:
public static byte[] ImageConvertion(){
File inputFile = new File("/storage/emulated/0/IFSpictures/icon-si_strapclamp.jpg");
byte[] data;
try{
FileInputStream input = new FileInputStream(inputFile);
ByteArrayOutputStream output = new ByteArrayOutputStream ();
byte[] buffer = new byte[65535];
int l;
while ((l = input.read(buffer)) > 0)
output.write (buffer, 0, l);
input.close();
output.close();
data = output.toByteArray();
return data;
} catch (IOException e) {
System.err.println(e);
data=null;
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
我的网络服务是用 ASP.NET (C#) 语言编写的,并且有一个函数将字节数组作为参数并将其转换回服务器计算机上的图像。
[WebMethod]
public void ByteArrayToPicture(byte[] imageData)
{
using (var …Run Code Online (Sandbox Code Playgroud) 在我的代码中尝试:

串流内容
engine.SetDocument((MemoryStream)content); //No work
Run Code Online (Sandbox Code Playgroud)
或者
var a = new MemoryStream();
engine.SetDocument(content.CopyTo(a)); //Error
Run Code Online (Sandbox Code Playgroud) 昨天我遇到了一个奇怪的问题:当我想传递一个 zip 文件并byte[]读取它时,我得到了一个Ionic.Zip.ZipExpception
无法将其读取为 ZipFile
public string Import(byte[] file)
{
try
{
var stream = new MemoryStream(file);
if (ZipFile.IsZipFile(stream))
{
ImportArchive(stream);
} else {
...
}
...
}
private void ImportArchive(MemoryStream stream)
{
var zip = ZipFile.Read(stream); //--> ZipException thrown
...
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我传递byte[]as 参数而不是MemoryStream,一切正常:
public string Import(byte[] file)
{
try
{
if (ZipFile.IsZipFile(new MemoryStream(file), true))
{
ImportArchive(file);
} else {
...
}
...
}
private void ImportArchive(byte[] file)
{
var fileStream = new …Run Code Online (Sandbox Code Playgroud) 我一直在互联网上搜索,但没有找到答案。你想告诉我,如何解码base64为Image折线图吗?我一直在尝试先从数组转换base64为Byte数组,然后从Byte数组转换为Image.
Private Function convertbytetoimage(ByVal BA As Byte())
Dim ms As MemoryStream = New MemoryStream(BA)
image = Image.FromStream(ms) 'I always get wrong in this line.
Return image
End Function
Run Code Online (Sandbox Code Playgroud) System.IO.MemoryStream我对使用基于字节数组的可写性给出 ArgumentException 的基本实验感到困惑
newBytes用文字初始化ms使用数组进行初始化,并将可写标志设置为TrueVB网
Try
Dim newBytes() As Byte = {0, 128, 255, 128, 0}
Dim ms As New System.IO.MemoryStream(newBytes, True)
ms.Write({CByte(4)}, 1, 1)
Catch ex as Exception
End Try
Run Code Online (Sandbox Code Playgroud)
C#.net
try
byte() newBytes = {0, 128, 255, 128, 0};
System.IO.MemoryStream ms = new System.IO.MemoryStream(newBytes, true);
ms.Write(byte(4), 1, 1);
catch Exception ex
end try
Run Code Online (Sandbox Code Playgroud)
异常是ArgumentException带有文本“偏移量和长度超出数组范围或计数大于从索引到源集合末尾的元素数”。
显然内存流有Length: 5并且在位置1写入一个字节应该是完全可行的,为什么会有例外?
C# .Net-Core 3.1
在我的 C# api 中,我在 FileStreamResult 中返回一个 pdf 文件,效果很好。
一般来说,我将流包装在 using 中,但是此代码失败并显示
Cannot access a closed Stream.
using (MemoryStream stream = new MemoryStream(byteArray))
{
fileStreamResult = new FileStreamResult(stream, "application/pdf");
}
return (ActionResult)fileStreamResult;
Run Code Online (Sandbox Code Playgroud)
所以我需要这样做:
var stream = new MemoryStream(byteArray);
fileStreamResult = new FileStreamResult(stream, "application/pdf");
return (ActionResult)fileStreamResult;
Run Code Online (Sandbox Code Playgroud)
我假设流需要保持打开状态,我应该担心内存泄漏还是 IIS 会关闭流吗?有更好的选择吗?
现在,我正在库的帮助下在内存中创建一个 Parquet 文件,并将其上传到Azure Blob storage. 不过,这次我想要更简单的东西,即只是将一个文本文件写入DateTime.UtcNow内存中的文本文件并将其上传到 Azure。
到目前为止我的代码:
BlobServiceClient BlobServiceClient = new BlobServiceClient("my_code");
var containerClient = BlobServiceClient.GetBlobContainerClient("my_container");
var blobClient = containerClient.GetBlockBlobClient($"path/to/specific/directory/file.parquet");
using (var outStream = await blobClient.OpenWriteAsync(true).ConfigureAwait(false))
using (ChoParquetWriter parser = new ChoParquetWriter(outStream))
{
parser.Write(data_list);
}
Run Code Online (Sandbox Code Playgroud)
ChoParquetWriter如果没有我正在使用的库的一部分,如何在内存中创建文本文件?
更新:找到解决方案
using (var outStream = await blobClient4.OpenWriteAsync(true).ConfigureAwait(false))
{
byte[] bytes = null;
using (var ms = new MemoryStream())
{
TextWriter tw = new StreamWriter(ms);
tw.Write(RequestTime.ToString());
tw.Flush();
ms.Position = 0;
bytes = ms.ToArray();
ms.WriteTo(outStream);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法?如果不是,没关系
我正在尝试从 Blazor InputFile 组件上传多个图像:
<InputFile OnChange="@LoadFiles" multiple accept=".png, .jpg, .jpeg, .gif" />
Run Code Online (Sandbox Code Playgroud)
一旦进入内存,我需要使用 SkiaSharp 将它们的大小调整为最大宽/高 1000 像素。我为此创建了一个辅助方法,但它似乎在任何超过大约 4MB 的图像上失败。我通过搜索以及任何可用的(相当缺乏的)Microsoft 文档将以下逻辑拼凑在一起,因此我的方法可能完全错误:
using SkiaSharp;
public static byte[] Resize(byte[] fileContents, int maxWidth, int maxHeight)
{
using MemoryStream ms = new(fileContents);
using SKBitmap sourceBitmap = SKBitmap.Decode(ms); // <-- EXCEPTION HERE ON LARGER FILES
int height = Math.Min(maxHeight, sourceBitmap.Height);
int width = Math.Min(maxWidth, sourceBitmap.Width);
var quality = SKFilterQuality.High;
using SKBitmap scaledBitmap = sourceBitmap.Resize(new SKImageInfo(width, height), quality);
using SKImage scaledImage = SKImage.FromBitmap(scaledBitmap);
using SKData data = …Run Code Online (Sandbox Code Playgroud)