Как разрешить пользователю загружать XML-файл - PullRequest
2 голосов
/ 25 февраля 2009

Что я хочу сделать, так это то, что пользователь выбирает некоторые поля в сетке, и в соответствии с этими данными я создаю XML-файл на веб-сервере, а затем я хочу, чтобы пользователь загружал его, как при загрузке любого файла. Но проблема в том, что я не могу использовать этот код:

Response.ContentType = "APPLICATION/OCTET-STREAM";

        // initialize the http content-disposition header to
        // indicate a file attachment with the default filename
        // "myFile.txt"
        System.String disHeader = "Attachment; Filename=\"" + fileName +
           "\"";
        Response.AppendHeader("Content-Disposition", disHeader);
        FileInfo downloadFile = new FileInfo(fileFullName);
        if (downloadFile.Exists)
        {
            Response.WriteFile(downloadFile.FullName);
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }

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

Для каждого файла я создаю кнопку ссылки во время выполнения и добавляю этот код:

lnkProblem.Text = "Problemler dosyası";
    lnkProblem.Visible = true;
    lnkProblem.Command += new CommandEventHandler(lnkUser_Command);
    lnkProblem.CommandName = Request.QueryString["fileNameProblems"];
    lnkProblem.CommandArgument = Request.QueryString["fileNameProblems"];

Затем используйте эту функцию для загрузки пользователем:

void lnkUser_Command(object sender, CommandEventArgs e)
{
    Response.ContentType = "APPLICATION/XML";

    System.String disHeader = "Attachment; Filename=\"" + e.CommandArgument.ToString() +
       "\"";
    Response.AppendHeader("Content-Disposition", disHeader);
    FileInfo downloadFile = new FileInfo(Server.MapPath(".") + "\\xmls\\" + e.CommandArgument.ToString());
    if (downloadFile.Exists)
    {
        Response.WriteFile(Server.MapPath(".") + "\\xmls\\" + e.CommandArgument.ToString());
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

Приложение создает xml-файл, но где-то в нем приложение помещает html-теги в этот xml-файл, поэтому я не могу открыть этот файл, есть ли в любом случае это сделать? Может быть, любой другой пример ...

Ответы [ 2 ]

3 голосов
/ 25 февраля 2009

Самый простой способ отправить файл клиенту - использовать метод TransmitFile, подобный следующему:

FileInfo file = new FileInfo(filePath); // full file path on disk
Response.ClearContent(); // neded to clear previous (if any) written content
Response.AddHeader("Content-Disposition", 
    "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "text/xml"; //RFC 3023
Response.TransmitFile(file.FullName);
Response.End();

Для нескольких файлов общим решением является упаковка всех файлов в zip-файл и их отправка (в данном случае тип mime будет application / zip).

1 голос
/ 25 февраля 2009

Создайте отдельный IHttpHandler, который будет обслуживать только файлы, которые вы хотите, чтобы ваши пользователи загружали, и Redirect для этого обработчика в lnkUser_Command.

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