แนวทางที่ดีที่สุดในการดาวน์โหลดภาพ

ฉันมีไซต์ธรรมดา (WebAPI) ที่ส่งคืนอัลบั้มจำนวนมากในวิธีการรับ แต่ละอัลบั้มมีคุณสมบัติต่างๆ เช่น ชื่อ ศิลปิน และอื่นๆ แอตทริบิวต์ด้านล่างนี้คือแอตทริบิวต์รูปภาพ (รูปภาพอัลบั้ม) แต่ละอัลบั้มมีรูปภาพ วิธีที่ดีที่สุดในการส่งรูปภาพกลับไปให้ลูกค้าคือวิธีใด ควรส่งเป็นข้อมูลไบนารีเป็นส่วนหนึ่งของออบเจ็กต์อัลบั้มเช่น

Public Class Album
{
    string title;
    byte[] image;
}

หรือฉันควรส่งเส้นทางไปยังรูปภาพในออบเจ็กต์ Album และให้ลูกค้าดาวน์โหลดรูปภาพแยกกัน

เช่นเดียวกับอัลบั้ม Public Class { string title; สตริง imagePath; }


person user3547774    schedule 25.09.2014    source แหล่งที่มา


คำตอบ (2)


คุณสามารถดูโพสต์นี้ ไฟล์ที่ดาวน์โหลดเป็นสตรีมในคอนโทรลเลอร์ (ASP.NET MVC 3) จะถูกกำจัดโดยอัตโนมัติหรือไม่ เป็นข้อมูลอ้างอิง

คุณสามารถใช้ FileStream

protected override void WriteFile(HttpResponseBase response) {
    // grab chunks of data and write to the output stream
    Stream outputStream = response.OutputStream;
    using (FileStream) {
        byte[] buffer = new byte[_bufferSize];
        while (true) {
            int bytesRead = FileStream.Read(buffer, 0, _bufferSize);
            if (bytesRead == 0) {
                // no more data
                break;
            }
            outputStream.Write(buffer, 0, bytesRead);
        }
    }
}
person Michael Sync    schedule 25.09.2014
comment
ขอบคุณสำหรับตัวชี้ คุณช่วยบอกฉันได้ไหมว่าอะไรคือวิธีที่ดีที่สุดในการดาวน์โหลดรูปภาพแยกกันในคำขออื่นและส่งเส้นทางในวัตถุต้นฉบับหรือส่งไบต์รูปภาพในวัตถุต้นฉบับเอง - person user3547774; 25.09.2014
comment
คุณต้องการให้ผู้ใช้ดาวน์โหลดภาพของคุณหรือไม่? เช่นเดียวกับที่ผู้ใช้จะคลิกที่ปุ่มดาวน์โหลดและรูปภาพเหล่านั้นจะถูกดาวน์โหลดไปยังเครื่องของผู้ใช้.. หรือคุณเพียงแค่แสดงรูปภาพเหล่านั้นบนไซต์ไคลเอนต์ (html และ js)? หากคุณเพียงต้องการแสดงรูปภาพเหล่านั้นบนหน้า HTML ก็สมเหตุสมผลแล้วที่จะส่งคืนรายการลิงก์รูปภาพ.. - person Michael Sync; 25.09.2014
comment
ฉันแค่อยากจะแสดงภาพในฝั่งไคลเอ็นต์ สิ่งที่คุณพูดคือส่ง likn url ไปยังรูปภาพแล้วดาวน์โหลดแต่ละภาพแยกกัน? - person user3547774; 25.09.2014
comment
คุณสามารถส่ง url จาก api.. จากนั้นในฝั่งไคลเอ็นต์ คุณตั้งค่า url เหล่านั้นเป็นแท็กรูปภาพ .. เบราว์เซอร์จะดาวน์โหลดรูปภาพโดยอัตโนมัติ - person Michael Sync; 25.09.2014

แทนที่จะผ่าน.

Public class Album
{
    string title;
    byte[] image;
}

กลับไปหาลูกค้า ฉันจะเปลี่ยน image เป็น int imageId:

Public class Album
{
    string Title{get;set};
    int ImageId{get;set};
}

จากนั้นสร้างตัวควบคุม WebApi ที่จัดการรูปภาพด้วยวิธีการที่เขียนดังนี้:

public async Task<HttpResponseMessage> Get(HttpRequestMessage request, int imageId)
    {

        byte[] img = await _myRepo.GetImgAsync(imageId);

        HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ByteArrayContent(img)
        };
        msg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return msg;
    }
person Mike_G    schedule 25.09.2014