浏览器网页如何直接访问客户端电脑文件

2025-05-28 04:39:59

1、创建C#类库项目:ImageActiveX使用VS开发工具新建 C# .net framework 类库->选择.net framework 4.6->项目取名“ImageActiveX”;

浏览器网页如何直接访问客户端电脑文件

2、ImageActiveX项目右击应用程序->属性->应用程序->程序集信息->然后选中“使程序集COM可见”

浏览器网页如何直接访问客户端电脑文件

3、ImageActiveX项目右击应用程序->属性->生成->然后选中“为COM互操作注册”

浏览器网页如何直接访问客户端电脑文件

4、ImageActiveX项目新建类Main.clas衡痕贤伎s 代码如下:using System;using System.Collectio荏鱿胫协ns.Generic;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;namespace ImageActiveX{ [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] public interface IObjectSafety { [PreserveSig] int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions); [PreserveSig()] int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions); } [Guid("E52C3E70-B486-4743-B8AE-5D830A561442")] public partial class Main : IObjectSafety { private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"; private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}"; private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}"; private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}"; private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}"; private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; private const int S_OK = 0; private const int E_FAIL = unchecked((int)0x80004005); private const int E_NOINTERFACE = unchecked((int)0x80004002); private bool _fSafeForScripting = true; private bool _fSafeForInitializing = true; public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) { int Rslt = E_FAIL; string strGUID = riid.ToString("B"); pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; switch (strGUID) { case _IID_IDispatch: case _IID_IDispatchEx: Rslt = S_OK; pdwEnabledOptions = 0; if (_fSafeForScripting == true) pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER; break; case _IID_IPersistStorage: case _IID_IPersistStream: case _IID_IPersistPropertyBag: Rslt = S_OK; pdwEnabledOptions = 0; if (_fSafeForInitializing == true) pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA; break; default: Rslt = E_NOINTERFACE; break; } return Rslt; } public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) { int Rslt = E_FAIL; string strGUID = riid.ToString("B"); switch (strGUID) { case _IID_IDispatch: case _IID_IDispatchEx: if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true)) Rslt = S_OK; break; case _IID_IPersistStorage: case _IID_IPersistStream: case _IID_IPersistPropertyBag: if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true)) Rslt = S_OK; break; default: Rslt = E_NOINTERFACE; break; } return Rslt; } } public partial class Main { public string SayHello() { return "Hi I'm from ActiveX Compliled by C#!"; } public string SetData(string input) { return input; } public string Image_GetBase64(string imagePath) { if (string.IsNullOrWhiteSpace(imagePath)) { return "出错了:你传入参数为空!"; } if (!File.Exists(imagePath)) { return "出错了:你传入的图片文件不存在!"; } try { Bitmap tmpBitmap = new Bitmap(imagePath); string tmpBase64 = ""; using (MemoryStream ms = new MemoryStream()) { tmpBitmap.Save(ms, ImageFormat.Jpeg); byte[] tmpByteData = new byte[ms.Length]; ms.Position = 0; ms.Read(tmpByteData, 0, (int)ms.Length); ms.Close(); tmpBase64 = Convert.ToBase64String(tmpByteData); } return tmpBase64; } catch (Exception ex) { return string.Format("出错了,读取图片转base64异常:{0}", ex.Message); } } /// <summary> /// 将Base64的图片保存到指定位置 /// <returns></returns> public bool Image_SaveToLocal(string imgBase64,string img_SavePath) { //自己添加自己的方法 return true; } }}

浏览器网页如何直接访问客户端电脑文件

5、创建插件安装程序:ImageActiveXSetUpVS新建项目选择:“SetUp Project” 或者 “安装项目”;本项目不需要写任何代码 只是做安装配置即可;可选择项目 按F4 进行具体的安装配置设置;

浏览器网页如何直接访问客户端电脑文件

6、如果没有“SetUp Project” 或者 “安装项目”这个两个选项,需要手动安装扩展插件:VS菜单->扩展->管理扩展->搜索安装:Microsoft Visual Studio Installer Projects

浏览器网页如何直接访问客户端电脑文件

7、ImageActiveXSetUp项目右键->添加(Add)->项目输出->项目:选择ImageActiveX插件项目

浏览器网页如何直接访问客户端电脑文件

8、编译程序打包项目(ImageActiveXSetUp):生成Setup.exe文件和ImageActiveXSetUp.msi安装文件;

9、在本地双击运行Setup.exe文件 安装插件:

10、用IE浏览器打开网页(MyActiveXTest.html)测试插件功能,可放在本常挢傣捅地桌面测试,也可以将网页放到服务器上通过客户端访问页面测试:具体代码如下:<!DOCTYPE html><html><head><meta charset="UTF-8"> <title></title> <script type="text/javascript"> //插件安装成功之后,就可以使用这种方式进行检测 function SayHello() { try { //实例化插件 var test = new ActiveXObject("ImageActiveX.Main"); if (test == undefined) { alert("初始化失败"); } else { alert(test.SayHello()); } } catch (e) { console.log(e); } } function SetData() { try { var test = new ActiveXObject("ImageActiveX.Main"); if (test == undefined) { alert("初始化失败"); } else { alert(test.SetData("这是浏览器输入原样返回")); } } catch (e) { console.log(e); } } //从客户端系统直接获取图片的Base64编码 function LoadImg() { try { var test = new ActiveXObject("ImageActiveX.Main"); if (test == undefined) { alert("初始化失败"); } else { let tmpPath=document.getElementById('001').value; let tmpBase64=test.Image_GetBase64(tmpPath); document.getElementById('showBase64Img').src='data:image/png;base64,' + tmpBase64; } } catch (e) { console.log(e); } } </script></head><body> <!--引用插件:浏览器会根据ClassID检测对应插件是否已经注册,没有注册提示下载指定网路路径的setup.exe文件;由于本插件没有UI 所以width height都设置为0即可--> <object cla---ssid="CLSID:E52C3E70-B486-4743-B8AE-5D830A561443" codebase="setup.exe" id="abc" width="0" height="0"></object> <input type="button" value="调用SayHello()" onclick="SayHello()" /> <input type="button" value="调用SetData(str msg)" onclick="SetData()" /> <br/> <br/> 输入客户端本地图片路径: <input id="001" type="text" value="D:\\duoduo.png" ></input> <input type="button" value="加载客户端电脑文件测试" onclick="LoadImg()" /> <br/> <br/> <!--展示最终从客户端本地加载的图片--> <img id='showBase64Img' src='' width="762px" height="702px" /></body></html>

11、最终测试效果如下图:

浏览器网页如何直接访问客户端电脑文件
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢