2012-12-24 3 views
1

Я новичок в разработке .Net. я пытаюсь разрешить загрузку текстового файла:Загрузить txt-файл

Я использую этот код:

protected void Page_Load(object sender, EventArgs e) 
    { 
       string str = "Test information"; 
       byte[] bytes = new byte[str.Length * sizeof(char)]; 
       System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
       MemoryStream mem = new MemoryStream(); 
       mem.Write(bytes, 0, str.Length); 

       Stream outStream = Response.OutputStream; 
       Response.ContentType = "application/text/plain"; 
       Response.AppendHeader("Connection", "keep-alive"); 
       Response.AppendHeader("Content-Disposition", " attachment; filename = " + "test.txt"); 
       mem.WriteTo(outStream); 
       outStream.Close(); 
    } 

Но я получаю текстовый файл с плохой первой строки (проблемы с кодировкой) и многие другие строки с информацией о текущей странице.

Update: Вот файл я получаю

Bad string 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head><title> 
    ASP.NET AJAX Web Services: Web Service Sample Page 
</title> 
    <script src="../Scripts/jquery-1.3.2.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#MainContent_RegisterUser_CreateUserStepContainer_UserName").blur(function (event) { 
       $.ajax({ 
        type: "POST", 
        url: "../About.aspx/validateUser", 
        contentType: "application/json; charset=utf-8", 
        data: "{'username': '" + $(this).val() + "'}", 
        dataType: "json", 
        success: AjaxSucceeded, 
        error: AjaxFailed 
       }); 
      }); 
     }); 
     function AjaxSucceeded(result) { 
      if (result.d == "true") { 
       $("#LoginSpan").text("Такой пользователь уже существует"); 
      } 
      else { 
       $("#LoginSpan").text(""); 
      } 
     } 
     function AjaxFailed(result) { 
      alert(result.status + ' ' + result.statusText); 
     } 
    </script> 
    <link href="Styles/Site.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
    <form method="post" action="BuyingSuccess.aspx?id=19" id="form1"> 
<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MjQ5ODA0NjlkGAIFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBSljdGwwMCRIZWFkTG9naW5WaWV3JEhlYWRMb2dpblN0YXR1cyRjdGwwMQUpY3RsMDAkSGVhZExvZ2luVmlldyRIZWFkTG9naW5TdGF0dXMkY3RsMDMFE2N0bDAwJEhlYWRMb2dpblZpZXcPD2QCA2THchHerzY1rr1yLcH18X4YPCuH2pX6++6OU9oOftLDQg==" /> 
</div> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['form1']; 
if (!theForm) { 
    theForm = document.form1; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 



<script src="/Shop3/WebResource.axd?d=gJqNbXOsVujM8wR8-hfUcLtWhOiTVJCVfh9Lo7jgFFHsWxINU3DVAgCd3VVMHS94GhZGb8YTI_r4HUkshGHWuB2iNiNOHXsKESFMdk577mE1&amp;t=634669639690714017" type="text/javascript"></script> 
<div class="aspNetHidden"> 

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgL4/Z3vDgLC0ZzyCk29Agd/VrCau7HXz2AM6rx2j8z5dvoBoXKKKc+infsA" /> 
</div> 
    <div class="page"> 
     <div class="header"> 
      <div class="title"> 
       <h1> 
        Рнструкции 
       </h1> 
      </div> 
      <div class="loginDisplay"> 

           <span class="bold"> 
           <span id="HeadLoginView_HeadLoginName">usert</span> 
           </span> 
           <a id="HeadLoginView_HeadLoginStatus" href="javascript:__doPostBack(&#39;ctl00$HeadLoginView$HeadLoginStatus$ctl00&#39;,&#39;&#39;)">Выйти</a> 

      </div> 
      <div class="clear hideSkiplink"> 
       <a href="#NavigationMenu_SkipLink"><img alt="Skip Navigation Links" src="/Shop3/WebResource.axd?d=qlxWJrbukMv20w9xY1h0SQe9L8dtSGVTDQ606-0jsJTHpyJh9XQcnnSaKyQTCktjR9G7_qlWhTXAgZB4Ay9LLv-RUiwbYud3LVU-Sm9I6hQ1&amp;t=634669639690714017" width="0" height="0" style="border-width:0px;" /></a><div class="menu" id="NavigationMenu"> 
    <ul class="level1"> 
     <li><a class="level1" href="Default.aspx">Рнструкции</a></li><li><a class="level1" href="About.aspx">Рћ проекте</a></li> 
    </ul> 
</div><a id="NavigationMenu_SkipLink"></a> 
      </div> 
     </div> 
     <div class="main"> 

    <span id="MainContent_Label1">Вы купили инструкцию, поздравляем!</span> 

     </div> 
     <div class="clear"> 
     </div> 
    </div> 
    <div class="footer"> 

    </div> 

<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script></form> 
</body> 
</html> 

Как исправить эту проблему?

+2

Chars - это не байт. Вам нужно использовать класс «Encoding». – SLaks

+0

Тип контента должен, вероятно, быть просто «text/plain» – SWeko

+0

Response.ContentType = «text/plain»; не помогло. Пожалуйста, посмотрите мое обновление - есть текстовый файл, который я получаю –

ответ

1

Измените ContentType на application/octet-stream, чтобы гарантировать, что файл будет загружен через все браузеры.

например изменить его к этому:

Response.Clear(); 
Response.Charset = ""; 
Response.AddHeader("content-disposition", "attachment;filename=" + fileName); 
Response.ContentType = "application/octet-stream"; 
Response.Write(mem.ToArray()); 
Response.End(); 
-1

Может быть, это также хороший способ использовать System.Net.WebClient для загрузки строки, байты или файлы с веб-ресурса.

WebClient client = new WebClient(); 
byte[] imageAsBytes = client.DownloadData(uri); 
String webSource = client.DownloadString(uri); 
client.DownloadFile(uri, "C:\\myfile.txt"); 

Он также поддерживает асинхронную загрузку.

+0

Это должно сделать кодировку автоматически. –

+1

Вопрос о загрузке файла клиенту. – SWeko

0

Добавить следующую строку в конце события Page_load после outStream.Close(); выписка

Response.End(); 
Смежные вопросы