If your module is wrapped in an AJAX UpdatePanel or has "Supports Partial Rendering" checked in the module's control definition, the FileUpload control will not be able to perform the upload as it requires a full postback. Without a full postback, the property fu.PostedFile would always be null.
If you want to use an AJAX UpdatePanel or "Supports Partial Rendering", the button control which triggers the upload will need to be registered as a PostBackControl in the module control's Page_Init or Page_Load handler. As the following code will need to be called each time the page loads, do NOT place it within a If Not Page.IsPostback condition:
If DotNetNuke.Framework.AJAX.IsEnabled Then
DotNetNuke.Framework.AJAX.RegisterPostBackControl(btn)
End If
As an aside, you might also like to check out my ImageEditorControl for DNN at www.codeplex/imageeditor as it provides file upload, image preview, and basic image editing including cropping and enhancement, auto-resizing and thumbnailing, and save to any of the DNN file storage systems.