Program.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Text; namespace WopiServerTutorial
{
class WopiServer
{
private HttpListener Listener; static void Main(string[] args)
{
WopiServer s = new WopiServer();
s.Start(); Console.WriteLine("A simple wopi webserver. Press a key to quit.");
Console.ReadKey(); s.Stop();
} public void Start()
{
Listener = new HttpListener();
Listener.Prefixes.Add(@"http://+:8080/");
Listener.Start();
Listener.BeginGetContext(ProcessRequest, Listener);
Console.WriteLine(@"WopiServer Started");
} public void Stop()
{
Listener.Stop();
} private void ProcessRequest(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result); Console.WriteLine(@"Got a " + context.Request.HttpMethod + " request for URL: " + context.Request.Url.PathAndQuery);
var stringarr = context.Request.Url.AbsolutePath.Split('/');
var rootDir = @"C:\\temp\\"; if (stringarr.Length == 5 && context.Request.HttpMethod.Equals(@"GET"))
{
Console.WriteLine(@"Getting content for the file: " + rootDir + stringarr[3]); // get file's content
var file = rootDir + stringarr[3];
var stream = new FileStream(file, FileMode.Open);
var fi = new FileInfo(file); context.Response.ContentType = @"application/octet-stream";
context.Response.ContentLength64 = fi.Length;
stream.CopyTo(context.Response.OutputStream);
context.Response.Close();
}
//else if (stringarr.Length == 5 && context.Request.HttpMethod.Equals(@"POST"))
//{
// // write
//}
else if (stringarr.Length == 4 && context.Request.HttpMethod.Equals(@"GET"))
{
Console.WriteLine(@"Getting metdata for the file: " + rootDir + stringarr[3]);
var fi = new FileInfo(rootDir + stringarr[3]); CheckFileInfo cfi = new CheckFileInfo();
cfi.AllowExternalMarketplace = false;
cfi.BaseFileName = fi.Name;
cfi.BreadcrumbBrandName = "";
cfi.BreadcrumbBrandUrl = "";
cfi.BreadcrumbDocName = "";
cfi.BreadcrumbDocUrl = "";
cfi.BreadcrumbFolderName = "";
cfi.BreadcrumbFolderUrl = "";
cfi.ClientUrl = "";
cfi.CloseButtonClosesWindow = false;
cfi.CloseUrl = "";
cfi.DisableBrowserCachingOfUserContent = true;
cfi.DisablePrint = true;
cfi.DisableTranslation = true;
cfi.DownloadUrl = "";
cfi.FileUrl = "";
cfi.FileSharingUrl = "";
cfi.HostAuthenticationId = "s-1-5-21-3430578067-4192788304-1690859819-21774";
cfi.HostEditUrl = "";
cfi.HostEmbeddedEditUrl = "";
cfi.HostEmbeddedViewUrl = "";
cfi.HostName = @"SharePoint";
cfi.HostNotes = @"HostBIEnabled";
cfi.HostRestUrl = "";
cfi.HostViewUrl = "";
cfi.IrmPolicyDescription = "";
cfi.IrmPolicyTitle = "";
cfi.OwnerId = @"4257508bfe174aa28b461536d8b6b648";
cfi.PresenceProvider = "AD";
cfi.PresenceUserId = @"S-1-5-21-3430578067-4192788304-1690859819-21774";
cfi.PrivacyUrl = "";
cfi.ProtectInClient = false;
cfi.ReadOnly = false;
cfi.RestrictedWebViewOnly = false;
cfi.SHA256 = "";
cfi.SignoutUrl = "";
cfi.Size = fi.Length;
cfi.SupportsCoauth = false;
cfi.SupportsCobalt = false;
cfi.SupportsFolders = false;
cfi.SupportsLocks = true;
cfi.SupportsScenarioLinks = false;
cfi.SupportsSecureStore = false;
cfi.SupportsUpdate = true;
cfi.TenantId = @"33b62539-8c5e-423c-aa3e-cc2a9fd796f2";
cfi.TermsOfUseUrl = "";
cfi.TimeZone = @"+0300#0000-11-00-01T02:00:00:0000#+0000#0000-03-00-02T02:00:00:0000#-0060";
cfi.UserCanAttend = false;
cfi.UserCanNotWriteRelative = false;
cfi.UserCanPresent = false;
cfi.UserCanWrite = true;
cfi.UserFriendlyName = "";
cfi.UserId = "";
cfi.Version = @"%22%7B59CCD75F%2D0687%2D4F86%2DBBCF%2D059126640640%7D%2C1%22";
cfi.WebEditingDisabled = false; // encode json
var memoryStream = new MemoryStream();
var json = new DataContractJsonSerializer(typeof(CheckFileInfo));
json.WriteObject(memoryStream, cfi);
memoryStream.Flush();
memoryStream.Position = 0;
StreamReader streamReader = new StreamReader(memoryStream);
var jsonResponse = Encoding.UTF8.GetBytes(streamReader.ReadToEnd()); context.Response.ContentType = @"application/json";
context.Response.ContentLength64 = jsonResponse.Length;
context.Response.OutputStream.Write(jsonResponse, 0, jsonResponse.Length);
context.Response.Close();
}
else
{
byte[] buffer = Encoding.UTF8.GetBytes("");
context.Response.ContentLength64 = buffer.Length;
context.Response.ContentType = @"application/json";
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.OutputStream.Close();
} Listener.BeginGetContext(ProcessRequest, Listener);
}
}
}

CheckFileInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text; namespace WopiServerTutorial
{
[DataContract]
public class CheckFileInfo
{
[DataMember]
public bool AllowExternalMarketplace { get; set; }
[DataMember]
public string BaseFileName { get; set; }
[DataMember]
public string BreadcrumbBrandName { get; set; }
[DataMember]
public string BreadcrumbBrandUrl { get; set; }
[DataMember]
public string BreadcrumbDocName { get; set; }
[DataMember]
public string BreadcrumbDocUrl { get; set; }
[DataMember]
public string BreadcrumbFolderName { get; set; }
[DataMember]
public string BreadcrumbFolderUrl { get; set; }
[DataMember]
public string ClientUrl { get; set; }
[DataMember]
public bool CloseButtonClosesWindow { get; set; }
[DataMember]
public string CloseUrl { get; set; }
[DataMember]
public bool DisableBrowserCachingOfUserContent { get; set; }
[DataMember]
public bool DisablePrint { get; set; }
[DataMember]
public bool DisableTranslation { get; set; }
[DataMember]
public string DownloadUrl { get; set; }
[DataMember]
public string FileSharingUrl { get; set; }
[DataMember]
public string FileUrl { get; set; }
[DataMember]
public string HostAuthenticationId { get; set; }
[DataMember]
public string HostEditUrl { get; set; }
[DataMember]
public string HostEmbeddedEditUrl { get; set; }
[DataMember]
public string HostEmbeddedViewUrl { get; set; }
[DataMember]
public string HostName { get; set; }
[DataMember]
public string HostNotes { get; set; }
[DataMember]
public string HostRestUrl { get; set; }
[DataMember]
public string HostViewUrl { get; set; }
[DataMember]
public string IrmPolicyDescription { get; set; }
[DataMember]
public string IrmPolicyTitle { get; set; }
[DataMember]
public string OwnerId { get; set; }
[DataMember]
public string PresenceProvider { get; set; }
[DataMember]
public string PresenceUserId { get; set; }
[DataMember]
public string PrivacyUrl { get; set; }
[DataMember]
public bool ProtectInClient { get; set; }
[DataMember]
public bool ReadOnly { get; set; }
[DataMember]
public bool RestrictedWebViewOnly { get; set; }
[DataMember]
public string SHA256 { get; set; }
[DataMember]
public string SignoutUrl { get; set; }
[DataMember]
public long Size { get; set; }
[DataMember]
public bool SupportsCoauth { get; set; }
[DataMember]
public bool SupportsCobalt { get; set; }
[DataMember]
public bool SupportsFolders { get; set; }
[DataMember]
public bool SupportsLocks { get; set; }
[DataMember]
public bool SupportsScenarioLinks { get; set; }
[DataMember]
public bool SupportsSecureStore { get; set; }
[DataMember]
public bool SupportsUpdate { get; set; }
[DataMember]
public string TenantId { get; set; }
[DataMember]
public string TermsOfUseUrl { get; set; }
[DataMember]
public string TimeZone { get; set; }
[DataMember]
public bool UserCanAttend { get; set; }
[DataMember]
public bool UserCanNotWriteRelative { get; set; }
[DataMember]
public bool UserCanPresent { get; set; }
[DataMember]
public bool UserCanWrite { get; set; }
[DataMember]
public string UserFriendlyName { get; set; }
[DataMember]
public string UserId { get; set; }
[DataMember]
public string Version { get; set; }
[DataMember]
public bool WebEditingDisabled { get; set; }
}
}

WopiServerTutorial的更多相关文章

随机推荐

  1. [hadoop读书笔记] 第九章 构建Hadoop集群

    P322 运行datanode和tasktracker的典型机器配置(2010年) 处理器:两个四核2-2.5GHz CPU 内存:16-46GN ECC RAM 磁盘存储器:4*1TB SATA 磁 ...

  2. Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件出错的解决方案

    Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件,运行页面,会出现如下的错误: 错误原因 VisualStudio 2012(或2013) WebFo ...

  3. mtrace检查内存泄漏

    内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glib ...

  4. Oracle Grid Infrastructure Installation Guide for Linux 以debug模式安装并记录日志

    最新文章:Virson's Blog 使用如下命令能够以debug模式安装Oracle Grid并将日志记录到文件 [grid@vdb1 11ggrid]$ ./runInstaller -debug ...

  5. Entries missing in table T028G T-CODE: OT51 SAP 传输配置操作为用户操作 SAP网银接口

    change this setting as a 'current setting' according to SAP note '135028 - Transfer IMG activity to ...

  6. CSS之float vs position:absolute

    补充:ul 应该设置下 list-style: none; 题外话:看了张鑫旭的视频,这家伙把简单的css玩出了新花样,绝对大神级的存在.膜拜下先~ float的作用前面一章已经说过了,但没考虑过的是 ...

  7. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  8. ARM mbed平台WIZwiki-W7500使用说明

    ARM mbed IDE 是ARM内核微控制器的在线开发工具,其站点是:http://developer.mbed.org. 站点提供了在线编译器,不须要本地安装编译器就可以进行开发,因此没有地点.时 ...

  9. Eclipse和MyEclipse的区别 分类: 编程工具 2015-07-18 11:12 23人阅读 评论(0) 收藏

    今天,在一个Q群里有人问Eclipse和MyEclipse的区别.虽然对于知道的人来说答案很简单,但是对于不知道的人来说就很难,很多问题也都是这样的,会者不难,难者不会. 其实,网上搜搜答案就挺多的, ...

  10. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...