Могу ли я сохранить ссылку для загрузки строки запроса под другим именем? - PullRequest
0 голосов
/ 25 марта 2020

Допустим, у меня есть 100 подключений:

video.mp4? 1234 video.mp4? 1221 ....

Когда я хочу загрузить эти ссылки, это сводится к video.mp4.

Могу ли я изменить это следующим образом?

Когда я хочу скачать его, он должен автоматически сохранить с этим именем:

1234-video.mp4 1221-video.mp4

Возможно ли это сделать с любым языком программирования?

Если я закодирую специальный браузер, могу ли я сделать что-то подобное с c #?

1 Ответ

0 голосов
/ 25 марта 2020

Возможно ли это сделать с любым языком программирования?

Да.

можно ли сделать что-то подобное с c #?

Да.

При использовании IIS 7.0+ и с пулом приложений, настроенным для интегрированного режима, вы можете обрабатывать все запросы (запросы к файлам stati c, кроме файлов динамических c например aspx, add, sv c, et c ..)

Вы также можете сделать это во время разработки, используя IIS Express (веб-сервер по умолчанию, используемый VS 2017 для веб-проектов)

Предположим, у вас есть веб-приложение с именем сборки WebApplication1

В вашем файле web.config установите следующий атрибут (runAllManagedModulesForAllRequests) в значение true и добавьте новый HTTP определение модуля выглядит следующим образом:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="VideoDownloadHandler" type="WebApplication1.VideoDownloadHandler"/>
    </modules> 
</system.webServer>

Затем реализуйте VideoDownloadHandler.cs как класс в своем веб-проекте следующим образом: (Этот код предполагает, что у вас есть видеофайл video.mp4 в папке / vid)

using System;
using System.Web;

namespace WebApplication1
{
    public class VideoDownloadHandler : IHttpModule
    {
        public void Dispose()
        {
            // Nothing to dispose
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += context_BeginRequest;
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            HttpRequest request = (sender as HttpApplication).Request;
            HttpResponse response = (sender as HttpApplication).Response;
            HttpApplication application = sender as HttpApplication;

            if (!request.Url.AbsolutePath.ToLowerInvariant().EndsWith("video.mp4"))
            {
                return;
            }

            string queryString = request.QueryString.ToString();
            string videoFileName = string.IsNullOrEmpty(queryString) ? "video.mp4" : queryString + "-video.mp4";

            response.ContentType = "video/mp4";
            response.AddHeader("content-disposition", "attachment;filename=" + videoFileName + ";");
            response.TransmitFile("~/vid/video.mp4");
            response.Flush();
            application.CompleteRequest();
        }
    }
}

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

Как видите, вы можете присвоить загруженному файлу любое имя (и здесь мы даем ему имя queryString + "-video.mp4"

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