Рейтинг:
1
F-ES Sitecore
Вы не загружаете файл на клиент, вы просто записываете его в файловую систему машины, на которой выполняется код. Когда это была ваша локальная машина, казалось, что она работает, но теперь код развернут на сервере, и он записывает файл на сервер.
Вы не можете сохранять файлы в клиентской системе из своего серверного кода, представьте себе последствия для безопасности, если бы веб-сайты могли это сделать? Вместо этого вам нужно будет передать файл клиенту, чтобы он получил поле "загрузить или открыть", и вы не сможете указать, где на машине сохранен файл и сохранен ли он вообще.
Google "asp.net скачать файл на клиент" для примеров того, как это сделать.
kav@94
я пробовал но они не работают во время загрузки я получаю исключение
F-ES Sitecore
Если код, который вы используете, неверен, обновите исходный вопрос с помощью кода, который вы пытаетесь использовать, что такое исключение и в какой строке оно появляется.
kav@94
Ответ.ContentType = " APPLICATION/OCTET-STREAM";
Заголовок Строки = " Вложение; Filename=XMLFile.xml";
Ответ.AppendHeader ("Content-Disposition", Заголовок);
Системы.ИО.FileInfo может единственный способ иметь установленный = новая система.ИО.FileInfo Может(Сервер.MapPath ("здесь у меня было имя папки приложения gien"));
Ответ.Функция WriteFile(Единственный Способ Иметь Установленный.Полное имя);
//Не забудьте добавить следующую строку
Ответ.Конец();
это код, который я использовал, но он дает исключение, потому что я использую stream writer в своем коде, и этот код не работает, я должен быть в состоянии перейти в папку загрузок при нажатии кнопки
F-ES Sitecore
Что такое исключение и на какой линии?
Рейтинг:
0
OriginalGriff
Вы не можете этого сделать: загружаемые файлы в рабочей среде находятся на отдельном компьютере, к которому ваш серверный код не имеет доступа. Вы вообще не можете использовать StreamWriter для записи файла непосредственно пользователю, и вы не можете контролировать то, что происходит с ним после начала загрузки, поскольку это полностью зависит от пользователя и его настроек браузера. Вы вообще не можете указать папку для сохранения файла или даже указать, что файл должен быть сохранен, а не открыт.
Вместо этого вы либо даете пользователю ссылку на клик:
<a href="serverFilePath.xlsx" >Click to Save Excel document</a>
Или вы отправляете его через объект ответа:
byte[] fileContent = File.ReadAllBytes(path);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition attachment; filename=myFile.xlsx");
HttpContext.Current.Response.AddHeader("Content-Length", fileContent.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.BinaryWrite(fileContent);
HttpContext.Current.Response.End();
OriginalGriff
Цитирую себя: "вы не можете контролировать то, что происходит с ним после начала загрузки, поскольку это полностью зависит от пользователя и его настроек браузера"
Вы не можете контролировать папку, в которую он попадает, или даже то, что он вообще сохраняется.
kav@94
byte[] fileContent = файл.ReadAllBytes(путь);
Свойство HttpContext.Тока.Ответ.Четкий();
Свойство HttpContext.Тока.Ответ.AddHeader ("Content-Disposition attachment; filename=myFile.xlsx");
Свойство HttpContext.Тока.Ответ.AddHeader ("Content-Length", fileContent.Длина.Метод toString());
Свойство HttpContext.Тока.Ответ.ContentType = " application/octet-stream";
Свойство HttpContext.Тока.Ответ.BinaryWrite(fileContent);
Свойство HttpContext.Тока.Ответ.Конец();
размещая этот код я получаю ошибку рядом с path и рядом с заголовком add
OriginalGriff
Вы когда-нибудь задумывались о чтении примера кода с точки зрения того, что автор не может точно видеть, что вам нужно ввести, и, возможно, придется использовать заполнители.
Вы знаете, например, "путь", где вам нужно поместить фактический путь к файлу, к которому вам нужно получить доступ, например? А "MyFile", где он не знает имени файла, в котором вы хотите его сохранить? :вздыхать:
kav@94
я знаю, что должен указать путь для загрузки excel, но я не могу пройти этот путь, потому что при размещении на сервере он выдает ошибку, поэтому я получил удар
строка pathUser = Environment.GetFolderPath(Environment.Специальная папка.Профиль пользователя);
строка pathDownload = путь.Combine(pathUser, " загрузки\\");
OriginalGriff
Профиль пользователя бесполезен на веб-сайте, каким пользователем вы себя считаете? IIS не использует идентификатор пользователя, который может быть вам полезен, и не имеет "обычной" папки в разделе "Пользователи".
Папка, которая вам нужна, почти наверняка будет частью структуры вашего сайта, а это значит, что вам, вероятно, понадобится что-то вроде сервера.MapPath (@"~\Downloads\TheFileIWantToAccess");
kav@94
охраняемых недействительными btnExportExcel_Click(объект отправителя, EventArgs в электронной)
{
строка pathDownload = @ "~\Downloads\ " +Session ["CPT"].ToString () + " - " + "HistoricalData.xls";
ExportToExcel(dsExcel, pathDownload);
lblMessage.Text = " Успешно Загружено";
}
private void ExportToExcel(таблица набора данных, строковый путь к файлу)
{
int tablecount = таблица.Таблицы.Рассчитывать;
StreamWriter sw = new StreamWriter(filePath, false);
}
это путь, который я получаю ~\Downloads\DATA.xls
и я получаю это исключение не смог найти часть пути 'C:\Program файлы (x86)\Общие файлы\Microsoft Shared\DevServer\11.0\~\Downloads\DATA.xls". рядом модулю записи StreamWriter ео = новая модулю записи StreamWriter(путь_к_файлу, ложные);
OriginalGriff
:вздыхать:
Сервер.MapPath ... Еще раз процитирую себя:
- Папка, которая вам нужна, почти наверняка будет частью структуры вашего сайта, а это значит, что вам, вероятно, понадобится что-то вроде сервера.MapPath (@"~\Downloads\TheFileIWantToAccess");'
kav@94
я не сохраняю свой файл в папке приложения я должен непосредственно сохранить его в папке Загрузки
OriginalGriff
И где находится папка загрузок на вашем веб-сайте в производстве?
kav@94
каждый пользователь будет иметь папку Загрузки знать где все файлы загружаются в загрузках то есть где мне нужно разместить свой файл
OriginalGriff
Теперь на одном компьютере размещено много разных сайтов?
Каждый веб-сайт имеет отдельную "файловую область", где хранятся все его файловые данные, HTML, ASPX, двоичные файлы C#, пользовательские данные и многое другое. Большинство систем организуют это в иерархическую структуру, так что у вас есть корневая папка веб-сайта (с файлом по умолчанию.aspx и тому подобным), а вся остальная информация находится в папках, которые висят на ней. Эта корневая папка веб-сайта называется " ~ " и используется вместе с сервером.MapPath для преобразования относительного адреса (т. е. относительно корня веб-сайта) в физический адрес, такой как "C:\IIS\Websites\YourDomainName\Users\DownLoads\JoeSmith117" from " ~\Users\DownLoads\JoeSmith117"
Вы не получаете доступ к жесткому диску напрямую, кроме как с помощью сервера.MapPath, потому что вы понятия не имеете, где находится ваш сайт и когда он может быть перемещен.