2011-12-26 7 views
5

Używam asp.net mvc i sekcja, w której użytkownik może przesyłać obrazy. Zastanawiam się, gdzie powinienem je przechowywać.Czy mogę zapisać przesłane (pliki img) w App_Data?

Podążałem za this tutorial i wydaje się, że zapisuje go w pliku app_data. Czytam jednak, że inna osoba twierdzi, że powinna przechowywać tylko twoją bazę danych.

Nie wiem więc, jakie są zalety używania app_data. Jestem na wspólnym hostingu, więc nie wiem, czy to robi różnicę.

Edit

Mam zamiar przechowywać ścieżkę do obrazów w bazie danych. Będę następnie używał ich w tagach graficznych i renderował je użytkownikom, gdy odwiedzają moją witrynę. Mam narzędzie do przesyłania plików, które będzie oczekiwać tylko obrazów (sprawdzenie będzie klientem i serwerem).

+0

Przechowuj zawartość obrazu w systemie plików i ścieżkę do obrazu w bazie danych. Czemu? Przeczytaj [ten post] (http: // stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for-a-app-app) –

+0

Mała uwaga: jeśli kiedykolwiek będziesz musiał w przyszłości skalować się poziomo, przechowuj przesłaną zawartość w folder na twoim serwerze stanie się problemem. Jeśli jest to dla Ciebie niepokojące, zastanów się nad skorzystaniem z usług takich jak przechowywanie błękitnych plam, proste przechowywanie w Amazon czy nawet baza danych, jak sugerują niektóre z poniższych odpowiedzi. – santiagoIT

Odpowiedz

4

Samouczek jest prostym przykładem - a jeśli czytasz komentarze, oryginalny kod właśnie zapisany w katalogu uploads, nr app_data w zasięgu wzroku.

została zmieniona na app_data bo to specjalny folder - jeden, który nie pozwoli na wykonanie kodu.

I dobrze zrozumiałeś - app_data jest naprawdę do przechowywania baz danych opartych na plikach. Takie jest znaczenie folderu. Jako że zapisywanie w nim obrazów nie wydaje się właściwym rozwiązaniem.

Jeśli jesteś pewien, że tylko zdjęcia zostaną przesłane (i kontrolujesz to), proponuję katalog /uploads - zarezerwowane miejsce dla obrazów, które również nie pozwolą na wykonanie kodu (coś, co powinieneś być w stanie kontrolować poprzez IIS).

+0

Czy przesyłany jest specjalny folder lub coś, co właśnie zrobiłeś? – chobo2

+0

@ chobo2 - Po prostu coś, o czym wspomniałem, ponieważ zostało zrobione pierwotnie w artykule, z którym się łączyłeś. – Oded

+0

Nie wiem, ile kontroli mam na IIS, ponieważ powiedziałem, że używam hostingu współdzielonego. Będę przechowywać względną ścieżkę w bazie danych, a następnie otrzymuję pełną ścieżkę, która będzie używana w znaczniku img. Więc nie jestem pewien, czy to się liczy jako wykonanie kodu. – chobo2

1

Powiedziałbym, że zależy to od tego, co zrobisz później. Jeśli użyjesz tych obrazów w znaczniku img, możesz zapisać je w strukturze Zawartość/folder.

Jeśli nie potrzeba im osiągalny z zewnątrz, lub muszą przesyłać je zmienić z powrotem, można przechowywać je z korzenia internetowej akademik jeśli pozwala na to.

Nie zapisałbym ich w app_data, ponieważ ja - osobiście - uważam, że jest to bardziej konwencja do przechowywania tam bazy danych. Większość programistów, którzy nie znają tego produktu, nie szuka tam obrazu.

Ale: można przechowywać pliki binarne w db (nawet jeśli prawdopodobnie nie jest to najlepszą rzeczą do zrobienia), więc odniesienie w db wskazując plik w tym samym katalogu ma sens ponownie.

Jest to raczej opinia niż pytanie techniczne, jak sądzę.

0

Wolę przechowywać je w bazie danych. Przechowując obrazy w systemie plików, okazało się, że zarządzanie nimi może być nieco trudniejsze. Dzięki bazie danych możesz szybko zmieniać nazwy plików, usuwać je, kopiować itp. Możesz zrobić to samo, gdy są w systemie plików, ale wymaga to trochę wiedzy na temat skryptów.

Plus Wolę nie zarządzać ścieżkami i lokalizacjami plików, co jest kolejnym głosowaniem na bazę danych. Te wartości ścieżek zawsze trafiają do pliku web.config i może być trudniej wdrożyć i zarządzać.

+1

Jednorazowo najlepiej przechowywać w DB, gdy używasz typu pliku SQL, który mapuje do systemu plików. Implikacje wydajności są dobrze znane, kiedy tego nie robisz. –

Powiązane problemy