protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        if (e == null)
        {
            throw new ArgumentNullException(nameof(e));
        }
        if (e.State != AjaxControlToolkit.AjaxFileUploadState.Success)
        {
            return;
        }

        string szKey = FileObjectSessionKey(e.FileId);

        PendingIDs.Add(szKey);

        Session[szKey] = new MFBPendingImage(new MFBPostedFile(e), szKey);
        e.DeleteTemporaryData();

        RefreshPreviewList();

        if (Mode == UploadMode.Legacy)
        {
            Mode = UploadMode.Ajax;
        }

        UploadComplete?.Invoke(this, e);
    }
예제 #2
0
        public async Task <UploadStatus> Upload(string[] logLines, UploadMetaData data)
        {
            var result = LogValidator.Validate(logLines);

            if (!result.IsValid)
            {
                UploadError?.Invoke(new UploadErrorEventArgs(0, data, result.Reason));
                return(new UploadStatus(new InvalidLogException(result.Reason)));
            }

            var log  = string.Join(Environment.NewLine, logLines);
            var item = new UploaderItem(log.GetHashCode());

            if (_inProgress.Contains(item))
            {
                Log.Debug($"{item.Hash} already in progress. Waiting for it to complete...");
                _inProgress.Add(item);
                return(await item.Status);
            }
            _inProgress.Add(item);
            Log.Debug($"Uploading {item.Hash}...");
            UploadStatus status;

            UploadInitiated?.Invoke(new UploadStatusChangedEventArgs(item.Hash, data));
            try
            {
                status = await TryUpload(logLines, data);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                status = new UploadStatus(ex);
            }
            Log.Debug($"{item.Hash} complete. Success={status.Success}");
            UploadComplete?.Invoke(new UploadCompleteEventArgs(item.Hash, data, status));
            foreach (var waiting in _inProgress.Where(x => x.Hash == item.Hash))
            {
                waiting.Complete(status);
            }
            _inProgress.RemoveAll(x => x.Hash == item.Hash);
            return(status);
        }
예제 #3
0
    protected MFBPendingImage AddPostedFile(MFBPostedFile pf, LatLong ll)
    {
        if (pf == null)
        {
            throw new ArgumentNullException(nameof(pf));
        }

        string szKey = FileObjectSessionKey(pf.FileID);

        PendingIDs.Add(szKey);
        MFBPendingImage result = new MFBPendingImage(pf, szKey);

        if (ll != null)
        {
            result.Location = ll;
        }
        Session[szKey] = result;
        UploadComplete?.Invoke(this, new EventArgs());
        RefreshPreviewList();
        return(result);
    }
예제 #4
0
 protected void ProcessClipboardImage()
 {
     // Regardless of mode, see if there's a clipboard image
     if (!String.IsNullOrEmpty(hImg.Value))
     {
         try
         {
             MFBPostedFile pf = new MFBPostedFile(hImg.Value);
             if (ValidateFileType(MFBImageInfo.ImageTypeFromFile(pf)))
             {
                 // create a pending file.
                 string szKey = FileObjectSessionKey(pf.FileName);
                 PendingIDs.Add(szKey);
                 Session[szKey] = new MFBPendingImage(pf, szKey);
                 RefreshPreviewList();
                 UploadComplete?.Invoke(this, new EventArgs());
             }
         }
         catch (FormatException) { } // if it's bad data, just don't do anything.
         hImg.Value = string.Empty;  // don't send it back down the wire!!!
     }
 }