Edit this page

How to upload files from MAC or Linux

On some operating systems like MAC OS and Linux it is possible to have file names, which are invalid for the Windows File System. may contain special characters or might not be in accordance with the Microsoft's Naming Convention. This makes file uploading impossible. That's why to upload a file with such invalid name we have to rename it before the uploading. Due to the nature of AsyncUpload and due to security restrictions such renaming will require a special way of implementation.

Uploading files from MAC OS or Linux

<telerik:RadAsyncUpload RenderMode="Lightweight" ID="RadAsyncUpload1" runat="server" HttpHandlerUrl="~/CustomHandler.ashx"  Target="~/Uploads"></telerik:RadAsyncUpload>
<asp:Button ID="btnSubmit" runat="server" Text="Submit Uploaded Files" />
  • Override the ChageOriginalFileName method and perform own file name validation
<%@ WebHandler Language="C#" Class="CustomHandler" %>

using System;
using System.Web;
using Telerik.Web.UI;
using System.Text.RegularExpressions;
using System.IO;

public class CustomHandler : AsyncUploadHandler
{
    protected override string ChangeOriginalFileName(string fileName)
    {
        return EscapeInvalidCharacter(fileName);
    }

    //Sample escaping of invalid windows characters
    private string EscapeInvalidCharacter(string fileName)
    {
        //Check if there is no invalid characters return the current name
        if (fileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) == -1)
        {
            return fileName;
        }
        else
        {
            //Escape invalid characters
            fileName = Regex.Replace(fileName, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5));
            //If all characters are invalid return underscore as a file name
            if (Path.GetFileNameWithoutExtension(fileName).Length == 0)
            {
                return fileName.Insert(0, "_");
            }
            //Else return the escaped name
            return fileName;
        }
    }
}
<%@ WebHandler Language="VB" Class="CustomHandler" %>

Imports System
Imports System.Web
Imports Telerik.Web.UI
Imports System.Text.RegularExpressions
Imports System.IO

Public Class CustomHandler
    Inherits AsyncUploadHandler

    Protected Overrides Function ChangeOriginalFileName(fileName As String) As String
        Return EscapeInvalidCharacter(fileName)
    End Function

    'Sample escaping of invalid windows characters
    Private Function EscapeInvalidCharacter(fileName As String) As String
        'Check if there is no invalid characters return the current name
        If fileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) = -1 Then
            Return fileName
        Else
            'Escape invalid characters
            fileName = Regex.Replace(fileName, "[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5))
            'If all characters are invalid return underscore as a file name
            If Path.GetFileNameWithoutExtension(fileName).Length = 0 Then
                Return fileName.Insert(0, "_")
            End If
            'Else return the escaped name
            Return fileName
        End If
    End Function

End Class

See Also