The one concept every integration depends on: an upload is staged first
and only becomes permanent when your FileUploaded handler saves it. This page lists both folders
live, so you can watch each stage happen.
What you should see: after selecting a file, a .upload + .meta pair appears in the temp store; the page then posts back automatically (AutoPostBack), your handler runs, and the saved file appears below — with the temp pair gone if you chose MoveFile, or still present (until the sweep) if you chose CopyFile.
When the event fires, save with:
Drag & drop files here, or paste from clipboard
Nothing has happened yet. Pick a save mode, then select a file - no other clicks needed.
1. Temp store (staged uploads, swept after 60 min)
f68e4b17-36ce-4860-a3bf-2d555ef2df79.upload — 2048 bytes
f68e4b17-36ce-4860-a3bf-2d555ef2df79.meta — 198 bytes
2. Saved folder (what your handler wrote - permanent)
8202481b09194ced86fd6f820f044d04.txt — 2048 bytes
Why your handler might "never fire": FileUploaded runs on the postback, not during the transfer. This page uses AutoPostBack="true" so the postback happens by itself; without it, the temp pair appears and then nothing happens until the page posts back some other way. If the attribute is rejected, your AjaxUploader.dll is old — right-click it → Details: File version must be 5.2.3.806 or later.
<au:AjaxFileUpload ID="Uploader1" runat="server"
AutoPostBack="true"
OnFileUploaded="Uploader1_FileUploaded" />
protected void Uploader1_FileUploaded(object sender,
AjaxUploader.Events.FileUploadedEventArgs e)
{
var savedName = Guid.NewGuid().ToString("N")
+ System.IO.Path.GetExtension(e.FileName ?? "");
// CopyFile keeps the staged copy until the sweep; MoveFile removes it now.
new AjaxUploader.Services.UploadService()
.CopyFile(e.FileGuid, "~/uploads/" + savedName);
}