Robię przesyłanie plików z Jersey, ale potrzebuję tylko nazwy pliku. Internet Explorer wysyła całą ścieżkę i na podstawie tego, co znajduje się w FormDataContentDisposition, Jersey analizuje ukośniki, więc nie mogę nawet tego przetworzyć. Dzięki.Jak uzyskać tylko nazwę pliku z przesyłaniem pliku Jersey
Odpowiedz
Brzmi jak trudny problem. Idealnym przypadkiem jest oczywiście chwycić ciąg zawierający ukośniki i po prostu użyć string.split!
W przeciwnym razie jedyną strategią, o której mogę pomyśleć, jest przetestowanie ciągu znaków, sprawdzającego, czy istnieją foldery o różnych długościach pierwszej części łańcucha itp. Może to powodować problemy, jeśli zamierzasz je znaleźć. folder "MyFolder (2)" i tam także "MyFolder". Nie wiem zbyt wiele o koszulce, ale polecam spróbować znaleźć inny sposób, aby pobrać ciąg, którego potrzebujesz.
- Dodaj wydarzenie zmiany do znacznika wejściowego plik
- Przetwarza się nazwę pliku, ponieważ nadal ma ukośniki w tym momencie
- Memory Stick że wartość do ukrytego wejścia
To ukryty wejściowego następnie zostanie przesłana wraz z resztą formularza.
@kombat znalazł to rozwiązanie i opublikował je jako komentarz. Na lepsze jest to teraz repostowane jako odpowiedź wiki społeczności.
Otrzymałem ten błąd, gdy próbowałem przeglądarki Eclipse. Kiedy wypróbowałem swój kod w Chrome, FormDataContentDisposition.getFileName() było w porządku.
To jest błąd w Jersey. W dyskusji na temat Nabble'a http://jersey.576304.n2.nabble.com/Jersey-truncating-the-slashes-from-the-uploaded-file-name-td5984041.html autor błędu ujawnia się i potwierdza "ponowne użycie kodu" do analizowania nagłówków HTTP w celu przeanalizowania Content-Disposition
. Jednak w cytowanym dokumencie RFC 2616 nie podano, że pola Content-Disposition
mają być ewidencjonowane zgodnie z regułami określonymi dla nagłówków HTTP. Wręcz przeciwnie, nie jest napisane, że:
Content-Dyspozycja nie jest częścią standardu HTTP, ale ponieważ jest powszechnie wdrożone, jesteśmy dokumentowania jej wykorzystania i zagrożenia dla implementors.
Ten błąd ma już brzydki obejście w klasie org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide
w aktualnej wersji Jersey, jednak to nie działa z IE 11 i krawędzi, ponieważ sprawdza User-Agent część, która uległa zmianie. Istnieje żądanie pobrania z poprawką: https://github.com/jersey/jersey/pull/233/files, ale przez prawie 2 lata nikt nie chciał go scalić.
Masz 3 rozwiązania:
1) aplly a „fix” na stronie klienta, który jest IMHO błędne podejście, ponieważ nie ma błędów po stronie klienta, błąd jest na Jersey!
2) Zmiana Jersey do innych ram, w których twórcy podjąć problemy z kompatybilnością bardziej poważnie, zamiast koncentrować się na maksymalizacji ponownego wykorzystania kodu itd
3) patch Jersey ręcznie. Pobierz źródła, zastosuj żądanie pobrania, skompiluj i zwolnij ze zmodyfikowanym numerem wersji.
Dzięki.To, co w końcu robiłem, to dodanie zdarzenia zmiany do znacznika wejściowego pliku iw nim parsowanie nazwy pliku, ponieważ nadal ma w tym miejscu ukośniki, i wstawienie tej wartości do ukrytego wejścia. Ten ukryty wkład zostanie następnie przesłany wraz z resztą formularza. – kombat
Cieszę się, że udało się to rozwiązać. – Drifter64
dodaj swoją odpowiedź na to pytanie zamiast umieszczać je w komentarzu, aby był bardziej odpowiedni –