strike_noir strike_noir - 28 days ago 9
ASP.NET (C#) Question

Return file download from byte[]

This code

string xml = XmlHelper.ToXml(queryTemplate);

byte[] xmlb = StringHelper.GetBytes(xml);

var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = String.Format("{0}_v{1}.xml", queryModel.Name, queryModel.Version),

// always prompt the user for downloading, set to true if you want
// the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(xmlb, "application/xml");


Turns out the string encoding is incorrect after it's converted into
byte[]


So I need to put the
string
immediately into file, like this

FileStream xfile = new FileStream(Path.Combine(dldir, filename), FileMode.Create, System.IO.FileAccess.Write);
hssfwb.Write(xfile);


But I don't want to do this, I don't need the file after the download. I just need to return it to the browser as file download and don't want to have to deal with file deletion afterward which can become pretty hectic when there's a lot of request.

How to correct the character encoding from
string
to
byte[]
and correctly return it to the browser?

The
GetBytes
function looks like this

public static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}

Answer Source

I have had the answer for this, it turns out the problem was character encoding.

The solution link is below

Converting string to byte[] creates zero character