Обработчик ASHX некорректно работает с клиентами вне моей сети - PullRequest
0 голосов
/ 11 января 2019

У меня есть приложение, которое используется людьми внутри и вне моей организации. Это приложение экспортирует файлы Excel (.xlsx) и PDF. У меня проблемы с экспортом файлов. Он отлично работает для людей, которые находятся в моей сети, но люди, находящиеся за пределами моей сети, получают сообщение «Ошибка чтения файла. Тип файла не поддерживается или файл поврежден», и размер файла будет только 127 байт вместо правильного размера (обычно около 2 мегабайт). Мне нужно, чтобы люди за пределами моей сети могли успешно загружать и открывать файлы.

Я также пытался запустить классы обработчиков, приспособленные для каждого конкретного типа файла, я пытался открыть каталог с файлом, чтобы «Все» имели доступ для чтения, я действительно не уверен, как это исправить. Веб-сервер работает под управлением IIS 10.

public class fileExportHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string fileToExport = "";
        string fileName = "exportedFile";
        string fileType = "";

        System.Web.HttpRequest request = System.Web.HttpContext.Current.Request;

        if ((request.QueryString["fileToExport"] != null))
        {
            fileToExport = request.QueryString["fileToExport"].ToString();

            string[] fileParts = fileToExport.Split('.');
            fileType = fileParts[1];

            if ((request.QueryString["fileName"] != null))
            {
                fileName = request.QueryString["fileName"].ToString();
            }
        }

        fileToExport = @"E:\Website\Cascade\" + fileToExport;

        //send the file to the browser
        System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;

        Response.ClearHeaders();
        Response.Clear();
        Response.Buffer = true;

        string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        if(fileType == "pdf")
            contentType = "application/pdf";

        Response.ContentType = contentType;

        Response.AddHeader("content-disposition", "attachment; filename=" + fileName + "." + fileType);
        Response.TransmitFile(fileToExport);

        Response.Flush();
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

1 Ответ

0 голосов
/ 22 января 2019

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

...