【问题标题】:set content type of file, in silverlight SaveFileDialog在 silverlight SaveFileDialog 中设置文件的内容类型
【发布时间】:2011-06-28 09:10:07
【问题描述】:

正如标题所说;有没有办法在 Silverlight SaveFileDialog 中设置文件的内容类型?我还没有找到方法,如果不可能,我并不感到惊讶,只是想我问一下,看看其他人是否肯定知道。

【问题讨论】:

    标签: c# silverlight-4.0 content-type savefiledialog


    【解决方案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;
            }
        }
    

    【讨论】:

      【解决方案2】:
       this.dialog = new SaveFileDialog();  
      
                  try 
                  {  
                      this.dialog.DefaultExt = ".txt";  
                      this.dialog.Filter = "Text Files|*.txt|Log Files|*.log|All Files|*.*";  
                      this.dialog.FilterIndex = 2;  
                  }  
                  catch ( Exception ex )  
                  {  
                      this.tblError.Text = "Error configuring SaveFileDialog: " + ex.Message;  
                  }  
      

      【讨论】:

      • 这只是设置过滤器。我希望托管应用程序的浏览器知道内容类型是什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2011-01-15
      • 2012-07-22
      • 1970-01-01
      • 2018-10-07
      • 2012-08-02
      • 1970-01-01
      相关资源
      最近更新 更多