Chcę przesłać plik do przeglądarki ze strony internetowej przy użyciu usługi internetowej. Aktualnie czytam plik w tablicy bajtowej base64 i zwracam go z usługi sieciowej. Ta usługa sieciowa jest wywoływana ze strony internetowej i utknąłem na tym, jak przesłać ją jako oryginalny plik do przeglądarki. Idealnie chciałbym przeczytać tablicę bajtów w strumieniu pamięci, a następnie napisać ją do strumienia odpowiedzi, jeśli to możliwe, aby użytkownik końcowy po prostu pobrał plik.Pobierz plik z serwisu WWW - w witrynie ASP.NET
Odpowiedz
Najpierw, zamiast wysyłać tablicę bajtów base64, niech usługa sieciowa po prostu zwróci tablicę bajtów dla pliku. Response.OutputStream.Write()
automatycznie zakoduje 64 bajty, więc równie dobrze możesz je zakodować w swoim strumieniu pamięci.
Po drugie, potrzebujesz więcej niż bajtów. Będziesz potrzebować metadanych skojarzonych z plikiem. W poniższym fragmencie umieściłem wszystkie te metadane w osobnej klasie (lokalna instancja o nazwie "plik"). Następnie użyj tego fragmentu, gdy masz już potrzebne dane:
Response.Clear();
Response.ClearHeaders();
Response.ContentType = file.ContentType;
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.FileName + "\"");
Response.AddHeader("Content-Length", file.FileSize.ToString());
Response.OutputStream.Write(file.Bytes, 0, file.Bytes.Length);
Response.Flush();
Response.End();
Ostrożnie z Response.End() http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful –
@Todd Smith: Dzięki za wskaźnik. Byłem świadomy problemu, ale masz rację, że inni nie; może to być poważny błąd. Jednak w przypadku pobierania pliku nie ma potrzeby dalszego przetwarzania, które powinno zostać wykonane, a zatem 'Response.End()' * jest * prawdopodobnie poprawnym połączeniem. Z pewnością jest w moim przypadku. – Randolpho
Czy powinienem użyć Response.Close() zamiast Repsonse.End(), a następnie? – user210757
To możliwe, trzeba upewnić się, że jawnie ustawić ContentType z httpResponse, na przykład:
Response.ContentType = "image/jpeg";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Jeśli chcesz kontrolować nazwę pliku, musisz dodać zawartość - nagłówek rozłożenia. Google może pomóc Ci znaleźć właściwy sposób na uporządkowanie tego.
+1, mimo że pominięto opcję Content-Disposition, która jest najważniejsza dla pobierania plików. Edycja: A potem ją dodałeś. Więc zignoruj to. :) – Randolpho
To naprawdę zależy od interfejsu do twojego serwisu. Tj. SOAP, REST, ASPX.
Jedna rzecz, którą możesz spróbować, to zmienić typ zawartości w odpowiedzi na "Aplikacja/strumień-oktetu". Lub coś podobnego, aby przekazać odbiorcy typ MIME.
Jeśli korzystasz z funkcji WCF, możesz korzystać z funkcji Stream jako metody zwracania w usłudze internetowej.
Zazwyczaj złym pomysłem jest osadzenie pliku w serwisie WWW. Po prostu dodajesz obciążenie i złożoność bez żadnych rzeczywistych korzyści.
Zamiast tego należy podać IHttpHandler, aby obsłużyć przesłanie pliku. Większość serwerów internetowych udostępnia również interfejsy API pomocników, aby uprościć to, np. w ASP.NET można uzyskać dostępu do pliku przesłanego z:
HttpContext.Request.Files [0]
Istnieje wiele skryptów JavaScript wysyłania plików, które uprości to na kliencie: http://www.phpletter.com/Demo/AjaxFileUpload-Demo/
Próbuję pobierać pliki do klienta, a nie przesyłać na serwer – user210757
, który to link jest spamem lub stracił swój kontekst w czasie. – mcy
- 1. Zadzwoń do serwisu WWW asp.net z PHP z wieloma parametrami
- 2. Prześlij plik z Androidem do serwisu WWW Django
- 3. Plik śledzenia Pobierz trafienia/zliczenia w ASP.Net
- 4. Jak wysłać obraz z serwisu WWW wiosną
- 5. Konwersja formatu Json Odpowiedź z serwisu WWW
- 6. ASP.NET MVC Pobierz plik ze ścieżką wirtualną
- 7. Prześlij obraz do serwisu WWW w ios
- 8. Pobierz aktualny adres URL w witrynie vb.net
- 9. ASP.NET MVC EPPlus Pobierz plik Excel
- 10. ASP.Net Pobierz plik do przeglądarki klienta
- 11. Import danych CSV z serwisu WWW do Excela
- 12. Problem z serwisem WWW Asp.Net
- 13. Który komponent kodu w aplikacji ASP.NET (WebForms lub MVC) obsługuje zasoby serwisu WWW, takie jak obrazy?
- 14. listę krajów i/lub listy miast Pobierz za pośrednictwem serwisu WWW
- 15. Pobierz plik wewnątrz folderu widoków w ASP.Net MVC 4.0
- 16. Pobierz plik w D
- 17. Pobierz plik pdf z wikipedia
- 18. Pobierz plik w Firefoksie z kątomierzem
- 19. Używanie tożsamości ASP.Net w wielu aplikacjach WWW
- 20. Jak zintegrować ASP.NET mvc z Projektem WWW
- 21. C# klienta do serwisu WWW Java - dane interoperacyjność problem
- 22. Jak mogę wysłać obrazy do serwisu WWW php?
- 23. Pobierz plik programowo na Androida
- 24. Pobierz najnowszy plik w katalogu
- 25. Jak pobrać plik z WWW :: Mechanize po przesłaniu formularza?
- 26. Pobierz plik z serwera Node.JS z AngularJS
- 27. Pobierz HttpRequestMessage z ActionFilter lub kontrolera sieci Web MVC ASP.NET poza interfejsem API WWW
- 28. Jak POST JSON i plik do serwisu internetowego z Angular?
- 29. Xcode: Pobierz plik mp3
i co czy problem dotyczy tego podejścia? Nie zadałeś pytania, więc prawdopodobnie szybko się zamknę. – Oded