0

タイトルが示すように; Silverlight SaveFileDialog でファイルのコンテンツ タイプを設定する方法はありますか? 私は方法を見つけていません、そしてそれが不可能であっても驚かないでください.

4

2 に答える 2

1

探しているのは、アップロードされたファイルの Mime タイプです。これは Silverlight で機能すると思いますが、その理由はわかりませんが、そのコンテキストで使用したことはありません。以下を追加する必要があります。

using System.Reflection;
using System.Runtime.InteropServices;

[System.Runtime.InteropServices.DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(
    System.UInt32 pBC,
    [MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
    [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
    System.UInt32 cbSize,
    [MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
    System.UInt32 dwMimeFlags,
    out System.UInt32 ppwzMimeOut,
    System.UInt32 dwReserverd
);

public void SomeMethod(string fileName)
{
    string mimeType = getMimeFromFile(fileName);

    if (mimeType == "text/plain")
{
        // do something
}
}

private string getMimeFromFile(string filename)
    {
        if (!File.Exists(filename))
            throw new FileNotFoundException(filename + " not found");

        byte[] buffer = new byte[256];
        using (FileStream fs = new FileStream(filename, FileMode.Open))
        {
            if (fs.Length >= 256)
                fs.Read(buffer, 0, 256);
            else
                fs.Read(buffer, 0, (int)fs.Length);
        }
        try
        {
            System.UInt32 mimetype;
            FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
            System.IntPtr mimeTypePtr = new IntPtr(mimetype);
            string mime = Marshal.PtrToStringUni(mimeTypePtr);
            Marshal.FreeCoTaskMem(mimeTypePtr);
            return mime;
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }
于 2011-08-03T18:50:09.860 に答える