Ошибка при сохранении документа с помощью веб-приложения в c# - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть веб-приложение в c#, которое создает и сохраняет документ в папке на локальном компьютере. Работает нормально при запуске с моего компьютера - однако, как только я разверну приложение на своем веб-сервере, я получаю эту ошибку.

Это недопустимое имя файла. Попробуйте выполнить одно или несколько из следующих действий: * Проверьте путь, чтобы убедиться, что он был введен правильно. * Выберите файл из списка файлов и папок.

Ниже приведен мой исходный код

            //Create an instance for word app  
            Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application();

            //Set animation status for word application  
            winword.ShowAnimation = false;

            //Set status for word application is to be visible or not.  
            winword.Visible = false;

            //Create a missing variable for missing value  
            object missing = System.Reflection.Missing.Value;

            //Create a new document  
            Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);

            //Add header into the document  
            //foreach (Microsoft.Office.Interop.Word.Section section in document.Sections)
            //{
            //    //Get the header range and add the header details.  
            //    Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            //    headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage);
            //    headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
            //    headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
            //    headerRange.Font.Size = 10;
            //    headerRange.Text = "Header text goes here";
            //}

            //Add the footers into the document  
            //foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections)
            //{
            //    //Get the footer range and add the footer details.  
            //    Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            //    footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed;
            //    footerRange.Font.Size = 10;
            //    footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
            //    footerRange.Text = "Footer text goes here";
            //}

            //adding text to document  
            document.Content.SetRange(0, 0);
            document.Content.Text = "This is test document " + Environment.NewLine;

            //Add paragraph with Heading 1 style  
            Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing);
            object styleHeading1 = "Heading 1";
            para1.Range.set_Style(ref styleHeading1);
            para1.Range.Text = "Para 1 text";
            para1.Range.InsertParagraphAfter();

            //Add paragraph with Heading 2 style  
            Microsoft.Office.Interop.Word.Paragraph para2 = document.Content.Paragraphs.Add(ref missing);
            object styleHeading2 = "Heading 2";
            para2.Range.set_Style(ref styleHeading2);
            para2.Range.Text = "Para 2 text";
            para2.Range.InsertParagraphAfter();

            //Create a 5X5 table and insert some dummy record  
            Microsoft.Office.Interop.Word.Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing);

            firstTable.Borders.Enable = 1;
            foreach (Row row in firstTable.Rows)
            {
                foreach (Cell cell in row.Cells)
                {
                    //Header row  
                    if (cell.RowIndex == 1)
                    {
                        cell.Range.Text = "Column " + cell.ColumnIndex.ToString();
                        cell.Range.Font.Bold = 1;
                        //other format properties goes here  
                        cell.Range.Font.Name = "verdana";
                        cell.Range.Font.Size = 10;
                        //cell.Range.Font.ColorIndex = WdColorIndex.wdGray25;                              
                        cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25;
                        //Center alignment for the Header cells  
                        cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                        cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

                    }
                    //Data row  
                    else
                    {
                        cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString();
                    }
                }
            }

            //Save the document  
            object filename = @"c:\Data\TestSignature.doc";

            document.SaveAs(ref filename);
            document.Close(ref missing, ref missing, ref missing);
            document = null;
            winword.Quit(ref missing, ref missing, ref missing);
            winword = null;
            Label7.Text = "Document created successfully !";

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Прошу прощения за то, что не достаточно ясно по моему вопросу Документ, который создается с помощью must, должен быть сохранен на компьютере пользователя / клиента. Предполагается, что все пользователи будут иметь диск C и папку с именем Data.The папка будет иметь необходимые разрешения для сохранения файла.

0 голосов
/ 16 февраля 2020

Вы не можете писать где-либо на сервере - например, вы не можете использовать этот каталог @"c:\Data\TestSignature.doc"; Может быть, если вы добавите разрешения, но лучше нет.

Используйте этот каталог внутри вашего asp. net папка для записи данных, к которым вы не хотите обращаться publi c.

/App_Data/

Или создайте какой-нибудь другой каталог в папке вашего веб-сайта и сохраните их там.

Вы можете использовать HttpRuntime.AppDomainAppPath, чтобы получить путь к вашему сайту и добавить дополнительный каталог.

В папке, которую вы собираетесь записать, вы должны дать права на запись для вашего удостоверения пула: Как установить правильные разрешения для файла для ASP. NET на IIS

...