Странная проблема при загрузке файла

#c# #asp.net

#c# #asp.net

Вопрос:

Я сохранил файл документа / pdf-файл или txt-файл в базе данных. Теперь, чтобы получить этот файл, я использую приведенный ниже код.

 JobApplicantResume oApplicantResumne = new JobApplicantResume();
DataSet dsApplicantResume = oApplicantResumne.GetJobApplicantResumeByJobApplicantResumeId(1552);//1552 Long value
Response.ClearContent();
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/xx-xxxx";
Response.AddHeader("Content-Disposition", "attachment;filename="   dsApplicantResume.Tables[0].Rows[0]["sFileName"].ToString());
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Byte[] bytes = (Byte[])dsApplicantResume.Tables[0].Rows[0]["binFile"];
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
  

Он выдает точный файл. Нет проблем с открытием файла.

На какой-то другой странице я использовал тот же код:

 JobApplicantResume oApplicantResumne = new JobApplicantResume();
DataSet dsApplicantResume = oApplicantResumne.GetJobApplicantResumeByJobApplicantResumeId(1552);//1552 Long value
Response.ClearContent();
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/xx-xxxx";
Response.AddHeader("Content-Disposition", "attachment;filename="   dsApplicantResume.Tables[0].Rows[0]["sFileName"].ToString());
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Byte[] bytes = (Byte[])dsApplicantResume.Tables[0].Rows[0]["binFile"];
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
  

Он также предоставляет файл для загрузки. Но когда я открываю его, данные поступают в каком-то другом формате.

Нравится:

 ؟½ï؟½ï؟½ï؟½ï؟½ï؟
  

Ненужные данные. Я не мог понять, почему возникает проблема. Если кто-либо сталкивался с подобной проблемой, или любое предложение / помощь будут очень полезны для преодоления этой проблемы.

Большое спасибо за ваше внимание.

Комментарии:

1. Уже немного поздно. Однако, можете ли вы решить ее сейчас?

Ответ №1:

Попробуйте добавить полный пример обозначения порядка байтов в Юникоде.

     //add the BOM
    byte[] bBOM = new byte[] { 0xEF, 0xBB, 0xBF };
    byte[] bContent = ms.ToArray();
    byte[] bToWrite = new byte[bBOM.Length   bContent.Length];

    //combile the BOM and the content
    bBOM.CopyTo( bToWrite, 0 );
    bContent.CopyTo( bToWrite, bBOM.Length );

    //write to the client
    HttpContext.Current.Response.Write( Encoding.UTF8.GetString( bToWrite ) );
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();