2012-02-21 8 views
8

Jeśli użytkownik spróbuje przeciągnąć i upuścić folder do kontrolki do przesyłania plików, aby go przesłać, muszę wyświetlić użytkownikowi komunikat o błędzie z informacją, że można przesłać tylko pliki. Problem polega na tym, że nie mogłem odróżnić pliku z folderu.Jak odróżnić plik od folderu podczas przesyłania za pomocą przeciągania i upuszczania w jquery?

Jednym ze sposobów było sprawdzenie właściwości pliku typu jQuery. Przypuśćmy, że nazwa pliku to "test.txt", wtedy typ pliku powróciłby "tekst/zwykły". W przypadku normalnej nazwy folderu, takiej jak "TestFolder", typ pliku byłby pusty, a jego rozmiar pliku zwróciłby 0. Jednak jeśli nazwa folderu zawierała rozszerzenie takie jak "TestFolder.txt", wówczas typ pliku powróciłby "tekst/zwykły".

Mogłem więc sprawdzić typ pliku i rozmiar pliku, ale nie byłoby to prawidłowe dla nazwy folderu, np. "TestFolder.txt". Czy ktoś może zaproponować mi dobre rozwiązanie, aby rozwiązać ten problem za pomocą jQuery lub innych metod?

+1

Czy możesz określić, z jakiej wtyczki "przeciągnij i upuść" korzystasz? (jeśli w ogóle) –

+0

Możesz również zauważyć, że IE nie ma jeszcze FileAPI, więc może nie dać Ci pliku, prawdopodobnie tylko nazwy. – index

+0

Widząc to i pomyślałem, że może ci pomóc, mieli ten sam problem: [Jak odróżnić plik lub folder] (http://stackoverflow.com/questions/5893787/how-do-i-distinguish-a-file- lub-a-folder-in-a-przeciągnij i upuść-event-in-c) – JamaicanMeCrazy

Odpowiedz

-1

O ile mi wiadomo, przeglądarka (i javascript nieodłącznie) nie ma dostępu do metodologii dostępu do plików dla celów bezpieczeństwa, więc nie można sprawdzić, czym właściwie jest plik.

Sam pracowałem nad tym problemem w przeszłości i najlepszą opcją, jaką odkryłem, jest praca z serwerem plików i zwrócenie błędu do strony po zakończeniu przesyłania.

Byłbym szczęśliwy, gdyby widziałem jeszcze lepsze alternatywy.

3

Możliwość określenia, czy folder został upuszczony, zależy od obsługi klienta użytkownika przez Filesystem API. Jeśli klient użytkownika obsługuje interfejs API systemu plików (obecnie tylko Chrome 21+), można skorzystać z interfejsu Entry, który ma dwa podrzędne interfejsy: DirectoryEntry i FileEntry. Interfejs ma funkcje isDirectory i . Bez obsługi tego interfejsu nie można ustalić, czy upuszczone elementy są folderami podczas badania obiektu DataTransfer.

0

Ponieważ nie można pozwolić na przeciąganie i upuszczanie folderów, najpierw należy sprawdzić, czy jest to folder lub plik, drugie tylko wtedy, gdy nie jest to folder, a następnie sprawdzić rozszerzenie pliku. Ale IE < 11 nie obsługuje plików API do obsługi. Mam nadzieję, że to pomoże.