2011-09-19 22 views
19

Hiện tại tôi có byte[] chứa tất cả dữ liệu của tệp hình ảnh, chỉ muốn xây dựng một thể hiện HttpPostedFileBase để tôi có thể sử dụng phương pháp hiện có thay vì tạo một quá tải mới.Cách tạo một thể hiện của HttpPostedFileBase (hoặc kiểu kế thừa của nó)

public ActionResult Save(HttpPostedFileBase file) 

public ActionResult Save(byte[] data) 
{ 
    //Hope I can construct an instance of HttpPostedFileBase here and then 
    return Save(file); 

    //instead of writing a lot of similar codes 
} 
+0

bạn có nhận được câu trả lời để phân tích tệp được lưu trữ trong byte [] không? Tôi giữ nguyên định vị nội dung, v.v. – Devela

Trả lời

36

Tạo một lớp có nguồn gốc như sau:

class MemoryFile : HttpPostedFileBase 
{ 
Stream stream; 
string contentType; 
string fileName; 

public MemoryFile(Stream stream, string contentType, string fileName) 
{ 
    this.stream = stream; 
    this.contentType = contentType; 
    this.fileName = fileName; 
} 

public override int ContentLength 
{ 
    get { return (int)stream.Length; } 
} 

public override string ContentType 
{ 
    get { return contentType; } 
} 

public override string FileName 
{ 
    get { return fileName; } 
} 

public override Stream InputStream 
{ 
    get { return stream; } 
} 

public override void SaveAs(string filename) 
{ 
    using (var file = File.Open(filename, FileMode.CreateNew)) 
     stream.CopyTo(file); 
} 
} 

Bây giờ bạn có thể vượt qua thể hiện của lớp này, nơi HttpPostedFileBase được mong đợi.

+2

Chỉ muốn hiển thị cách sử dụng MemoryFile sau khi bạn đã tạo: 'string filePath = Path.GetFullPath (" C: \\ images.rar "); FileStream fileStream = new FileStream (tệp FilePath, FileMode.Open); MemoryFile fileImage = new MemoryFile (tệpStream, "ứng dụng/x-rar-nén", "images.rar"); ' – Murat

1

Bạn không thể tự tạo phiên bản HttpPostedFileBase hoặc lớp học có nguồn gốc (HttpPostedFile). Lớp này chỉ được tạo ra bởi khung công tác. Tại sao bạn không thoát khỏi hành động điều khiển thứ hai có một mảng byte? Nó không cần thiết. Trình kết nối mô hình mặc định sẽ hoạt động tốt với trình kết nối có số HttpPostedFileBase.

+1

Nhà phát triển js gửi cho tôi byte [], sự cố này xảy ra khi người dùng dán hình ảnh từ khay nhớ tạm, thay vì chọn tệp hình ảnh để tải lên. –

+0

@Danny Chen, js gửi một 'byte []'? Điều đó có vẻ rất lạ. Giao thức nào đang được sử dụng? –

+1

Anh ấy gửi cho tôi chuỗi base64, hành vi này được thực hiện bởi trình chỉnh sửa js bên thứ 3. –

Các vấn đề liên quan