HttpClient - dodawanie/usuwanie plików w folderze sieciowym

0

Witam,
dziś założyłem ten temat i w sumie stanąłem w miejscu, bo dalej mam problem z dostępem.
Czy jest ktoś w stanie wytłumaczyć albo wysłać link jak mogę zarządzać plikami na serwerze przy pomocy HttpClient?
Przykładowo mam serwer https://www.serwer.com/, muszę pliki zapisywać w folderze https://www.serwer.com/dir1/destiny.
Jak mogę to zrobić?

3

Ale ty chcesz to inicjować z zewnątrz? To wystaw api (POST), które dostanie plik i go tam zapisze.

3

Zainteresuj się protokołem WebDav.
Wprawdzie troszkę wyszedł z mody w latach RESTu, ale nikt go nie anulował, i są moduły które go implementują

2

To może wystawić folder zmapowany pod danym adresem jako udział FTP?
Tylko to jest w ogólności temat bardzo daleko od używania HttpClienta.

0
UglyMan napisał(a):

Ale ty chcesz to inicjować z zewnątrz? To wystaw api (POST), które dostanie plik i go tam zapisze.

Ogólnie to wygląda tak że piszę aplikację (Razor-Pages) w pracy z różnymi statystykami/newsami itd. z firmy.
Pracuję teraz nad admin interface'm, przez który odpowiednie osoby będą mogły dodawać np. ww. newsy. Jest też możliwość załączenia różnych plików (pdf, zdjęcia), które muszę zapisywać na dysku sieciowym.

próbowałem to robić poprzez Stream, lecz wyrzuca mi błąd o braku dostępu.
Dostałem info z service desku że muszę to zrobić przy użyciu autentykacji. Próbowałem to zrobić za pomocą WebClient'a z którym miałem mały problem, a jedyne wskazówki jakie znalazłem - użyj HttpClient. No i tu jest moje pytanie - jak?
Szukałem informacji na necie ale HttpClient wszędzie jest używany do API, a ja po prostu w aplikacji dostaję obiekt IFormFile i chcę jakoś ten plik zapisać na dysku, nie chcę wystawiać API ani z żadnego korzystać

0

Czyli de facto potrzebujesz dodać na stronie coś w rodzaju załączania plików( cos takiego: https://vainolo.com/2020/10/08/uploading-a-file-in-asp-net-core-with-razor-pages/) ? Odczytujesz plik wysyłasz do backendyua on zapisuje to na dysk. Musisz mieć usługe odpaloną z odpowiednimi uprawnieniami, że by muc zapisać coś na dysk sieciowy.

0

Ani WebClient ani HttpClient. W formularzu na stronie dodawania newsa powinieneś mieć pola na uploadowanie plików, i obsłużyć je na backendzie. Serwer WWW to nie jest dysk.

0

@UglyMan:

Ja mam zrobiony widok, formularz itd, dopóki nie musiałem zamienić stream'a na coś, gdzie mogę podać credentiale i wrzucić plik na dysk miałem wszystko gotowe.
Tak wyglądał mój kod - plik IFormFile jest bindowany poprzez atrybut BindProperty więc wrzucę tylko kawałek kodu, który zapisywał plik na dysku:

[BindProperty]
public IFormFile Image { get; set; }
(...)
public IActionResult OnPost()
{
    if (ModelState.IsValid)
    {
        string imagename = "";
        if (Image != null)
        {
            imagename = FileHelper.GenerateFilename(Image.FileName);
            var imgsave = Path.Combine(PathHelper.NewsFilePath, imagename);
            try
            {
                var stream = new FileStream(imgsave, FileMode.Create);
                await Image.CopyToAsync(stream);
                stream.Close();
            }
            catch (Exception e)
            {
            }
            (...)
        }
        (...)
    }
    (...)
}

Ten kod działał lokalnie, ale po opublikowaniu wyrzuca "Access is denied". Dostałem info że muszę to zrobić tak, aby jakoś podać credentiale i zgrać tam plik będąc "zautentykowanym". Polecano mi do tego HttpClient, ale niestety nie wiem jak

1

Musisz ogarnąć, z jakimi uprawnieniami odpalasz usługę.
Edit:
Aplikacje na IIS odpalasz z jakąś pulą. na puli można ustawić użytkownika, który ma uprawnienia do tego dysku. Jak ty tam możesz zapisywać to spróbuj ze swoim na począte.
screenshot-20210722121602.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1