2015-11-10 9 views
0

На моем сайте у меня есть список предыдущего заказа, который разместил клиент, который можно просмотреть. Я пытаюсь разрешить пользователю загружать файл, который дает детали каждого заказа, так что, когда они нажимают «Загрузить» на странице заказа, они получат файл с информацией о заказе. У меня есть код для создания файла, но я не знаю, как его обслуживать. Вот то, что я до сих пор:Как я могу динамически создавать и обслуживать файл для пользователя (нажатие кнопки загрузки)? C#

var csv = new StringBuilder(); 
csv.Append("Customer,Bill To Name,Ship To Name,Patient,Order#,Order Date,Line,Item#,Item Description,Qty,UOM,Price,Ext Price,Carrier,Notes,Purchase Order"); 
foreach (var cartLine in model.Lines) { 
    var newLine = string.Format(.....) 
    csv.AppendLine(newLine); 
} 
System.IO.File.AppendAllText(filepath, csv.ToString()); 

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

EDIT: Я использую MVC

+1

Пожалуйста, покажите больше кода, какие технологии вы используете для размещения этих файлов, MVC, ФОС, индивидуальное обслуживание? –

+0

Я использую mvc - –

ответ

4

Вы можете просто вернуть файл в виде потока из памяти. Вам не нужно сохранять его в файловой системе сервера. Можете ли вы дать больше информации о том, какую серверную технологию вы используете, чтобы я мог дать вам конкретный код. В MVC вы можете сделать это следующим образом:

var bytes = Encoding.UTF8.GetBytes(csv.ToString()); 
return this.File(bytes, "text/csv") 

Возврат файла принимает содержимое как массив байтов или потока и типа носителя, чтобы сообщить браузеру, какой тип файла вы возвращаете.

0

Если вы используете стек asp.net по умолчанию (Controller/ApiController), сделайте это, вернув HttpResponseMessage. Получите поток из вашей строки csv или что-то еще, установите для вашего потока значение Content; соответственно измените заголовок типа контента, и вы закончили.

Пример:

public HttpResponseMessage GetCsv() 
{ 
    var csv = "whatever goes here"; 
    var stream = new MemoryStream(Encoding.UTF8.GetBytes(csv)); 
    var message = new HttpResponseMessage() 
    { 
     Content = new StreamContent(stream) 
    }; 
    message.Headers.Add("Content-type", "text/csv"); 
    return message; 
}