Emmablakes Ответов: 2

Как загрузить из приложения в систему пользователя


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

проблема сейчас заключается в том, что после развертывания приложения, нажав на кнопку экспорта, оно загружается прямо на сервер, а не на компьютер, с которого я вошел в систему.

Пожалуйста, помогите с путем, чтобы он всегда мог перейти в пользовательскую систему.

спасибо

Что я уже пробовал:

protected void BtnExport_Click1(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(Cs))
        {
            conn.Open();
            if (ddlSearchGridview.SelectedValue == "-1")
            {
                lblMessage.Text = "Select A Status to Export";
                
            }
            else
            {
                try
                {
                    SqlDataAdapter sda = new SqlDataAdapter("GetDataToExportToCsv", conn);
                    sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                    sda.SelectCommand.Parameters.AddWithValue("@complaintStatus", ddlSearchGridview.SelectedValue);

                    DataTable dt = new DataTable();
                    DataSet ds = new DataSet();
                    SqlDataAdapter da = new SqlDataAdapter();
                    

                    //sda.Fill(ds);
                    sda.Fill(dt);

                    path = "C:\\excel\\CBN_CCMS_" + DateTime.Now.ToString("ddMMyyyy") + DateTime.Now.Millisecond + ".csv";
                   // CreateExcelFile.CreateExcelDocument(ds, path);
                    CreateCSVFile(dt, path);

                }
                catch (Exception ex)
                {
                    ex.ToString();
                }
                finally
                {
                    conn.Close();
                }
            }
            
        }
    }

2 Ответов

Рейтинг:
7

OriginalGriff

Если это веб-серверная система, то вы не можете указать место назначения клиента: вы можете создать файл так, как вы показываете, но он всегда будет сохранен на сервере, потому что серверный код не имеет прямого доступа к клиентской файловой системе.
Чтобы отправить его клиенту, вам нужно будет использовать Response.WriteFile (здесь есть пример: asp.net - ASP C# отправить файл клиенту-переполнение стека[^]) и пусть клиент решает, куда его положить.


Рейтинг:
18

njammy

Добро Пожаловать Эммаблейкс

Вы должны будете позволить пользователю выбрать место сохранения файла и имя файла.
Решение заключается в следующем: (извините, что я придумал какой-то код, чтобы быстро поработать на моей машине для вас)

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Text;
using System.Web.UI;

namespace WebFormsGridViewCommand
{
    public partial class _Default : Page
    {
        private string Cs = @"data source=(localdb)\mssqllocaldb;initial catalog=webformstest;integrated security=true";
        private string path;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void BtnExport_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(Cs))
            {
                conn.Open();
                //if (ddlSearchGridview.SelectedValue == "-1")
                //{
                //    lblMessage.Text = "Select A Status to Export";

                //}
                //else
                //{
                try
                {
                    SqlDataAdapter sda = new SqlDataAdapter("GetDataToExportToCsv", conn);
                    sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                    //sda.SelectCommand.Parameters.AddWithValue("@complaintStatus", ddlSearchGridview.SelectedValue);

                    DataTable dt = new DataTable();
                    DataSet ds = new DataSet();
                    SqlDataAdapter da = new SqlDataAdapter();


                    //sda.Fill(ds);
                    sda.Fill(dt);

                    path = "C:\\excel\\CBN_CCMS_" + DateTime.Now.ToString("ddMMyyyy") + DateTime.Now.Millisecond + ".csv";
                    // CreateExcelFile.CreateExcelDocument(ds, path);
                    CreateCSVFile(dt, path);

                }
                catch (Exception ex)
                {
                    ex.ToString();
                }
                finally
                {
                    conn.Close();
                }
                //}

            }
        }

        private void CreateCSVFile(DataTable dt, string path)
        {
            var sb = new StringBuilder();

            // Add dt columns as csv first row headers:
            foreach (DataColumn dc in dt.Columns)
            {
                sb.Append(dc.ColumnName).Append(",");
            }
            sb.Remove(sb.Length - 1, 1);
            sb.AppendLine();

            // Add rows data to csv
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                foreach (DataColumn dc in dt.Columns)
                {
                    sb.Append(dt.Rows[i][dc.ColumnName]).Append(",");
                }
                sb.Remove(sb.Length - 1, 1);
                sb.AppendLine();
            }

            // Push csv string to server response for user to download
            string filename = Path.GetFileName(path); // Get the filename part only as the user will be asked where to save.

            Response.Clear(); // <- this will force the asp.net response to only deliver the csv file on button click, not html.

            // this tells the browser that it needs to prompt the user for a file save
            Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", filename));

            // This tells the browser the file type, in case it has built in viewer.
            Response.ContentType = "application/csv";

            // Sends the csv file content to the http response
            Response.Write(sb.ToString());
        }
    }
}


Emmablakes

спасибо, ньямми... именно то, что мне было нужно.

njammy

Пожалуйста, если у вас есть шанс, пожалуйста, оцените мой ответ тоже, используя звезды, чтобы помочь другим найти решение более эффективно.