ストリームから ASP.NET の汎用ハンドラーに画像をアップロード/送信する際に問題が発生しました。画像を取得して、Web サイトの汎用ハンドラーに送信できる Windows Phone アプリを作成しました。
残念ながら、場合によっては画像が (部分的に) 灰色になることがあります。モバイルデバイスのインターネット接続が失われた/悪いことが関係しているのではないかと思います. この問題は、約 50 枚の画像ごとに発生します。
欠陥のある画像が送信されても、エラーは発生しません。私は2つの可能な解決策を探しています。
- Windows Phone が部分的に灰色の画像を汎用ハンドラーにアップロードするのを防ぐにはどうすればよいですか。
- サーバー上で画像が部分的にグレーになっているかどうかを確認するにはどうすればよいですか? エラー メッセージを電話に送り返すことができます。
この質問をより完全にするために、汎用ハンドラーのコードとサンプル画像を含めました。第二に、なぜこれが発生するのか非常に興味があります。TCPIP にはハンドシェイクがあるため、上記のイッセウは可能ではないはずですか?
public class UploadImages : IHttpHandler
{
private IWorkOrderRepository _workOrderRepository;
private IDigitalFileRepository _digitalFileRepository;
private IUserRepository _userRepository;
public UploadImages()
{
_workOrderRepository = ((Global)HttpContext.Current.ApplicationInstance).Kernel.Get<IWorkOrderRepository>();
_digitalFileRepository = ((Global)HttpContext.Current.ApplicationInstance).Kernel.Get<IDigitalFileRepository>();
_userRepository = ((Global)HttpContext.Current.ApplicationInstance).Kernel.Get<IUserRepository>();
}
public void ProcessRequest(HttpContext context)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
var user = (Domain.Users.User)HttpContext.Current.User;
string WorkOrderId = context.Request.QueryString["workOrderId"];
string latitude = context.Request.QueryString["LATITUDE"];
string Longitude = context.Request.QueryString["LONGITUDE"];
if (latitude != "0" && Longitude != "0")
{
string file = "Filename.jpg";
string uploadPath = context.Server.MapPath("~/Temp/");
using (var stream = new MemoryStream())
{
var image = ImageResizer.Resize(Image.FromStream(context.Request.InputStream), 700);
image.Save(stream, ImageFormat.Jpeg);
stream.Position = 0;
var workOrder = _workOrderRepository.GetAll(x => x.Id == Convert.ToInt32(WorkOrderId)).FirstOrDefault();
workOrder.AddPhoto(_workOrderRepository, _digitalFileRepository, new AuditInfo((Domain.Users.User)user), stream, file, "image/jpeg", Convert.ToDouble(latitude), Convert.ToDouble(Longitude));
}
}
else
{
string file = "Filename.jpg";
string uploadPath = context.Server.MapPath("~/Temp/");
using (var stream = new MemoryStream())
{
var image = ImageResizer.Resize(Image.FromStream(context.Request.InputStream), 700);
image.Save(stream, ImageFormat.Jpeg);
stream.Position = 0;
var workOrder = _workOrderRepository.GetAll(x => x.Id == Convert.ToInt32(WorkOrderId)).FirstOrDefault();
workOrder.AddPhoto(_workOrderRepository, _digitalFileRepository, new AuditInfo((Domain.Users.User)user), stream, file, "image/jpeg");
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}