Tôi đang trong quá trình gửi tệp cùng với HttpWebRequest. Tệp của tôi sẽ từ Giao diện người dùng FileUpload. Ở đây tôi cần chuyển đổi File Upload thành filestream để gửi luồng cùng với HttpWebRequest. Làm thế nào để tôi chuyển đổi FileUpload thành một dòng phim?FileUpload to FileStream
Trả lời
Kể từ FileUpload.PostedFile.InputStream mang lại cho tôi Dòng, tôi đã sử dụng đoạn mã sau để chuyển nó sang mảng byte
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[input.Length];
//byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
không biết PostedFile có .InputStream .. thanks. – lawphotog
Bạn không thể chuyển đổi một FileUpload thành một FileStream. Tuy nhiên, bạn có thể lấy MemoryStream từ thuộc tính PostFile của FileUpload. Sau đó bạn có thể sử dụng MemoryStream đó để điền vào HttpWebRequest của bạn.
Bạn có thể vui lòng xây dựng - có thể với một ví dụ về mã hoặc liên kết không? – PeterX
@PeterX: Xem câu trả lời của Extremeswank cho một ví dụ. – ErikHeemskerk
Có thể tốt hơn để ống dòng nhập dữ liệu trực tiếp vào dòng đầu ra:
inputStream.CopyTo(outputStream);
Bằng cách này, bạn không lưu toàn bộ tệp trong bộ nhớ trước khi truyền lại. Ví dụ, đây là cách bạn sẽ viết nó vào một FileStream:
FileUpload fu; // Get the FileUpload object.
using (FileStream fs = File.OpenWrite("file.dat"))
{
fu.PostedFile.InputStream.CopyTo(fs);
fs.Flush();
}
Nếu bạn muốn viết nó trực tiếp đến một yêu cầu web, bạn có thể làm như sau:
FileUpload fu; // Get the FileUpload object for the current connection here.
HttpWebRequest hr; // Set up your outgoing connection here.
using (Stream s = hr.GetRequestStream())
{
fu.PostedFile.InputStream.CopyTo(s);
s.Flush();
}
Đó sẽ là hơn hiệu quả, vì bạn sẽ trực tiếp truyền tệp đầu vào tới máy chủ đích, mà không cần lưu bộ nhớ đệm đầu tiên trong bộ nhớ hoặc trên đĩa.
Khi bạn truy cập vào PostFile, tệp đã được đệm hoàn toàn bởi ASP.NET. Điều này chỉ có thể được phá vỡ bằng cách sử dụng 'HttpRequest.GetBufferlessInputStream()' (.NET 4 hoặc cao hơn), nhưng do đó yêu cầu bạn phân tích cú pháp toàn bộ thân yêu cầu. – ErikHeemskerk
Bạn có thể đặt một file Tải file lên trực tiếp vào một MemoryStream
bằng cách sử dụng FileBytes
(giản thể câu trả lời từ Tech Jerk)
using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes))
{
//do stuff
}
Hoặc nếu bạn không cần một MemoryStream
byte[] bin = FileUpload1.FileBytes;
- 1. ASP.NET FileUpload
- 2. FileUpload với Django
- 3. Knockout JS: FileUpload kiện
- 4. Twitter Bootstrap FileUpload
- 5. FileUpload tải tệp mở rộng
- 6. Delphi, FileStream và MemoryStream
- 7. FileStream vs/difference StreamWriter?
- 8. Sự cố với Spring FileUpload
- 9. <asp: FileUpload với UpdatePanel
- 10. C# Đúc MemoryStream để FileStream
- 11. FileStream và tạo thư mục
- 12. OutOfMemoryException khi tôi đọc 500MB FileStream
- 13. jQuery FileUpload không kích hoạt 'done'
- 14. Hỗ trợ crossload Ajax jQuery AJAX Fileupload
- 15. Bắt mở rộng của tập tin trong FileUpload kiểm soát
- 16. FileStream dường như không được kích hoạt
- 17. Mocking a Sử dụng với một FileStream
- 18. FileStream với tùy chọn DeleteOnClose File
- 19. Nhận Đường dẫn Ban đầu từ FileStream
- 20. SQL Azure có hỗ trợ FILESTREAM datatype
- 21. Đóng một FileStream có đóng StreamReader không?
- 22. C# tới ASP.NET MVC FileStream Crossover
- 23. Sự cố FileStream StreamReader trong C#
- 24. SQL Server 2008 hiệu suất FileStream
- 25. OutOfMemoryException khi gửi tệp lớn 500MB bằng FileStream ASPNET
- 26. SSMS không hiển thị hoặc kịch bản FileStream thuộc tính
- 27. Sử dụng nút bên ngoài để làm giàu: fileUpload
- 28. FileUpload không hoạt động trong bảng cập nhật
- 29. Cách hạn chế loại tệp trong điều khiển FileUpload
- 30. FileUpload và UpdatePanel: ScriptManager.RegisterPostBackControl hoạt động lần thứ hai
gì là bạn thực sự cố gắng để đạt được? –
Tôi cần chuyển tệp từ miền này sang tên miền khác. do đó, hãy tải tệp đã tải lên và gửi nó bằng cách sử dụng HttpWebRequest –