1

ストリームから ASP.NET の汎用ハンドラーに画像をアップロード/送信する際に問題が発生しました。画像を取得して、Web サイトの汎用ハンドラーに送信できる Windows Phone アプリを作成しました。

残念ながら、場合によっては画像が (部分的に) 灰色になることがあります。モバイルデバイスのインターネット接続が失われた/悪いことが関係しているのではないかと思います. この問題は、約 50 枚の画像ごとに発生します。

欠陥のある画像が送信されても​​、エラーは発生しません。私は2つの可能な解決策を探しています。

  1. Windows Phone が部分的に灰色の画像を汎用ハンドラーにアップロードするのを防ぐにはどうすればよいですか。
  2. サーバー上で画像が部分的にグレーになっているかどうかを確認するにはどうすればよいですか? エラー メッセージを電話に送り返すことができます。

この質問をより完全にするために、汎用ハンドラーのコードとサンプル画像を含めました。第二に、なぜこれが発生するのか非常に興味があります。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;
        }
    }
}

画像の例 部分的にグレー

画像の例 部分的にグレー

4

0 に答える 0