Jpeg到字节数组,而转换逻辑在if语句内
本文关键字:if 语句 转换 到字节 数组 Jpeg | 更新日期: 2023-09-27 17:53:25
我相信这是一个非常简单的问题,即使是没有经验的开发人员也能做到,但我只是刚刚开始。
我在逻辑上放了一个if语句来将jpeg转换为字节数组,这样除非选择了文件,否则转换不会发生。但这使得变量logoBytes
对数据参数不可见。一位同事告诉我,我必须将转换的逻辑放入一个方法中,然后在某个地方引用该方法,但我仍然相当困惑。
protected void btnSubmit_Click(object sender, EventArgs e)
{
Div1.Visible = true;
if (logoPrvw.Value != null)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(logoPrvw.Value);
byte[] logoBytes;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
logoBytes = ms.ToArray();
}
}
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
if (ddSchemeCode.SelectedIndex == 0)
{
lblCreated.Visible = true;
lblUpdated.Visible = false;
DataClass.addNewSchemeCode(data);
}
if (ddSchemeCode.SelectedIndex == 0 && ddVersion.SelectedIndex != 0)
{
lblCreated.Visible = true;
lblUpdated.Visible = false;
DataClass.addNewVersion(data);
}
if (ddSchemeCode.SelectedIndex != 0 && ddVersion.SelectedIndex == 0)
{
lblUpdated.Visible = true;
lblCreated.Visible = false;
DataClass.UpdateData(data);
}
这是TemplateData
级
public class TemplateData
{
public byte[] Logo { get; set; }
public string TemplateId { get; set; }
public string SchemeCode { get; set; }
public string Version { get; set; }
public string Comment { get; set; }
public TemplateData(string schemeCode, string version, string comment, string templateID, byte[] logo)
{
SchemeCode = schemeCode;
Version = version;
Comment = comment;
TemplateId = templateID;
Logo = logo;
}
public TemplateData(SqlDataReader dr)
{
initialiseData();
if (dr.HasRows)
{
Version = dr["Version"].ToString();
Logo = (byte[])dr["Logo"];
TemplateId = dr["TemplateId"].ToString();
Comment = dr["Comment"].ToString();
SchemeCode = dr["SchemeCode"].ToString();
}
}
如果logoPrvw.Value
是null
,您可能不想创建数据对象,也不想使用其余的代码。所以,也许你的解决方案就像这样简单:
if (logoPrvw.Value != null)
return;
System.Drawing.Image img = System.Drawing.Image.FromFile(logoPrvw.Value);
byte[] logoBytes;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
logoBytes = ms.ToArray();
}
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
//rest of your code
那么,您需要在if
语句之外声明logoBytes
变量,以便在创建TemplateData
时它仍然在作用域中。如果没有提供文件,您需要决定它应该具有什么值。例如,您可能希望它是null
,或者可能是一个空数组。您可以给变量一个初始值,或者使用else
子句。例子:
byte[] logoBytes = null;
if (logoPrvw.Value != null)
{
...
// Code that assigns a different value to logoBytes
}
TemplateData data = new TemplateData(..., logoBytes);
或:
byte[] logoBytes;
if (logoPrvw.Value != null)
{
...
// Code that assigns a value to logoBytes
}
else
{
logoBytes = new byte[0];
}
TemplateData data = new TemplateData(..., logoBytes);
我建议将"work out logoBytes
"代码重构为一个单独的方法,因此您将拥有:
byte[] logoBytes = GetLogoBytes(logoPrvw);
TemplateData data = new TemplateData(...);
那么你的GetLogoBytes
方法可以像这样:
byte[] GetLogoBytes(HtmlInputFile logoPrvw)
{
if (logoPrvw.Value == null)
{
return null; // Or an empty array, or whatever
}
using (Image img = ...)
{
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
}
}
}
请注意,您不想使用Image.FromFile
-您想使用发布文件中的数据,所以可能是Image.FromStream(logoPrvw.PostedFile.InputStream)