Bazıları dünyaya bakan bir portalda görüntülenmesi gereken güvenli bir sunucuda saklanan büyük bir resim koleksiyonum var. Portalın sunucusu, isteklere izin veren ancak doğrudan isteklerin güvenli alan adından geçmesini engelleyen bir DMZ'nin içinde. görüntüleri solr kullanılarak kategorize edilmiş ve ben WebClient
bir örneğini oluşturmak o url vermek ve bir MemoryStream
alabilirsiniz benim PhotoController
İçinde http://intenalname/folderA/folderAB/file.jpg
Web API Denetleyicisi, MemoryStream'i StreamContent'e dönüştürür
bir iç (apache?) sunucusu üzerinden indirilebilir. Response.content'i doldurmak için bu bellek akışını kullanmaya çalışırsam boş bir yanıt alır (kemancı başına). Yerel bir dosyaya yazmak için bellek akışını kullanırsam, dosyayı (FileStream ve FileInfo kullanarak) okuyun ve "beklendiği gibi" çalışır.
Dosya sisteminden geçmeden MemoryStream
- StreamContent
arasında olmalıdır (olmalıdır)? ama nasıl? StreamContent(stream)
için varsayılan kurucu, derleyici hatası olmadan bellek akışı örneğini kabul eder ... ancak yalnızca 'çalışmıyor'. Fiddler yoluyla test ederken
HttpResponseMessage response = Request.CreateResponse();
using (WebClient webClient = new WebClient())
{
string url = string.Format(PHOTO_GET, filePath);
using (MemoryStream memoryStream = new MemoryStream(webClient.DownloadData(url)))
{
// If these lines are unremarked the stream moves 'through' the file system and works (?!)
//memoryStream.Position = 0;
//string tempName = @"c:\test\" + Guid.NewGuid().ToString() + ".jpg";
//var fs = new FileStream(tempName, FileMode.OpenOrCreate);
//stream.CopyTo(fs);
//fs.Close();
//FileInfo fi = new FileInfo(tempName);
response.Headers.AcceptRanges.Add("bytes");
response.StatusCode = HttpStatusCode.OK;
//response.Content = new StreamContent(fi.ReadStream());
response.Content = new StreamContent(memoryStream);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("render");
response.Content.Headers.ContentDisposition.FileName = fileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");//("application/octet-stream");
response.Content.Headers.ContentLength = memoryStream.Length;
}
}
return response;
alıyorum:
[Fiddler] ReadResponse() başarısız oldu: Sunucu bu istek için tam bir yanıtı dönmedi. Sunucu 0 bayt döndürdü. buna yanıt içerik var geçebilir önce (FileStream Fiddler geçiyor bana görüntüsünü gösterir.)
Yorumlanan çıkış kodunda yaptığınız gibi 'memoryStream.Position 'değerini 0'a sıfırlamayı denediniz mi? – itsme86
denediğim birçok şeyden biri ... sevinç yok, teşekkürler –