各位老铁们,大家好,今天由我来为大家分享bitapps,以及bitappstore的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
本文目录
pm2.5多少是标准如何整合Office Web Apps至自己开发的系统程序员的自我修养: fread-C语言是怎样读取文件的怎样升级windows8系统怎样破解产品密钥为什么华硕电脑officewebApps不能用啊pm2.5多少是标准24小时平均浓度小于75微克/立方米。
细颗粒物又称细粒、细颗粒、PM2.5。细颗粒物指环境空气中空气动力学当量直径小于等于2.5微米的颗粒物。它能较长时间悬浮于空气中,其在空气中含量浓度越高,就代表空气污染越严重。虽然PM2.5只是地球大气成分中含量很少的组分,但它对空气质量和能见度等有重要的影响。与较粗的大气颗粒物相比,PM2.5粒径小,面积大,活性强,易附带有毒、有害物质(例如,重金属、微生物等),且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。
如何整合Office Web Apps至自己开发的系统实际上OfficeWebApps也是可以接入自己开发的系统的。下面介绍一下整合OfficeWebApps的一些理论知识。
要想让自己的系统与OfficeWebApps整合就一定要清楚一些概念,首先要理解什么是”WOPI”。
WOPI的英文全称是“WebApplicationOpenPlatformInterface”,中文名为“Web应用程序开放平台接口协议”。
WOPI协议提供一系列基于web方式的,使文档能在OfficeWebApps中查看与编辑的接口服务(WebService)。
只要webapplication按照标准,实现了WOPI的接口,那么就可以调用OfficeWebApps。例子很多,比如SharePoint,Exchange,SkyDriver,Dropbox集成OfficeWebApps。
如果自己做的web应用也实现了相应接口,也是可以调用OfficeWebApps的。实现文档的在线编辑查看。
这样比市面上的一些基于ActiveX的在线Office产品有很大的优势。
首先OfficeWebApps是基于网页技术,所以是跨平台的,可以在iOS,安卓,WP及PC使用,实现多屏一体。
其次OfficeWebApps实现了桌面Office的大部分功能,能在客户机没有安装Office的情况下,实现云端上的文档编辑查看。
下面介绍的内容都是基于http协议下的,https也是类似的。
在WOPI结构中,
我们把存放Office文档的web应用叫WOPIHost或者WOPIServer。
把查看编辑操作Office文档的web应用叫WOPIClient或者叫WOPIapplications。
所以,OfficeWebApps充当的就是WOPIClient的角色。
SharePoint,Exchange,自己开发的文档管理系统充当的就是WOPIHost的角色。
下图为浏览器,server,client三者的请求顺序及关系:
从上图可知,WOPIClient向WOPIServer发送了两次请求
1.Tellmeaboutthefile
2.Givemethefile
所以WOPIclient至少要提供两个Web服务。
1.一个是CheckFileInfo服务
此服务返回的是请求文件的基本信息,WOPIHost以json方式返回给WOPIClient.
服务URI格式一般为
http://server/<...>/wopi*/files/<id>?access_token=<token>
此服务返回的json格式类似为:
{
"BaseFileName":"SampleDocument.docx",
"OwnerId":"tylerbutler",
"Size":300519,
"SHA256":"+17lwXXN0TMwtVJVs4Ll+gDHEIO06l+hXK6zWTUiYms=",
"Version":"GIYDCMRNGEYC2MJREAZDCORQGA5DKNZOGIZTQMBQGAVTAMB2GAYA===="
}
Json中至少要包括五个属性:BaseFileName,OwnerId,Size,SHA256,和Version
BaseFileName:文件名。
OwnerId:文件所有者的唯一编号。
Size:文件大小,以bytes为单位。
SHA256:文件的256位bit的SHA-2编码散列内容。
Version:文件版本号,文件如果被编辑,版本号也要跟着改变。
更多参数介绍请参考:http://msdn.microsoft.com/en-us/library/hh622920(v=office.12).aspx
2.一个是GetFile服务
此服务返回的是请求文件的内容,WOPIhost以数据流的方式返回给WOPIClient.
服务URI格式一般为
http://server/<...>/wopi*/files/<id>/contents?access_token=<token>
注意:CheckFileInfo与GetFile服务的URI格式只差了一个/contents,其他地方的格式是没有不同的。这么做是为了让WOPIclient可以通过CheckFileInfo服务URI推导出GetFile服务的URI,千万不要别出心裁,写出的服务URI格式破坏了这层关系。
在上述URI格式中,都有一个access_taken身份验证令牌。这个身份验证令牌是必须要有的,WOPIclient会把此令牌回发给WOPIHost,由WOPIHost验证当前用户对当前文件的权限。所以实际上OfficeWebApps根本不涉及文档的权限管理。
我们在WOPIclient上打开一个Office文档的url地址类似如下:
http://wopi-app-server.contoso.com/wv/wordviewerframe.aspx?WOPISrc=
http%3A%2F%2Fmy-wopi-host%2Flocal%2Fwopi
%2Ffiles%2F1-Sample%2520Document.docx&access_token=
dc172034-c6f9-4a43-bc3f-d80dd93c1de1
这个里面有两个传递参数:WOPISrc和access_token
WOPISrc参数的内容为:http://my-wopi-host/local/wopi/files/1-Sample%20Document.docx
实际上这个是WOPIHost上的CheckFileInfo服务地址。
WOPIclient会通过这个地址加上access_token从WOPIhost上获取到1-Sample%20Document.docx文件的信息;
并且通过这个地址推导出WOPIHost上的GetFile服务地址,通过GetFile服务获取到1-Sample%20Document.docx文件的内容。
WOPIhost上判断什么类型的文件应该怎么用WOPIclient打开,WOPIclient会提供一个xml文件给WOPIhost,这份xml文件叫WOPIDiscovery。格式类似如下:
<?xmlversion="1.0"encoding="utf-8"?>
<wopi-discovery>
<net-zonename="external-https">
<appname="Word"favIconUrl="https://wopi-app-server.contoso.com/wv/
resources/1033/FavIcon_Word.ico"
checkLicense="true">
<actionname="view"ext="doc"default="true"
urlsrc="https://wopi-app-server.contoso.com/
wv/wordviewerframe.aspx?
<ui=UI_LLCC&><rs=DC_LLCC&><showpagestats=PERFSTATS&>"/>
<actionname="view"ext="docm"default="true"
urlsrc="https://wopi-app-server.contoso.com/
wv/wordviewerframe.aspx?
<ui=UI_LLCC&><rs=DC_LLCC&><showpagestats=PERFSTATS&>"/>
……
</app>
……
</net-zone>
</wopi-discovery>
如上所述,打开doc文件,应该使用https://wopi-app-server.contoso.com/wv/wordviewerframe.aspx的url打开。
WOPIhost应该获取这份文件一次,以后打开什么类型的文件,调用什么url自己判断。
程序员的自我修养: fread-C语言是怎样读取文件的为了效率的考虑,不至于频繁调用系统函数和访问IO设备,MSVCCRT的fread采用缓冲设计.C语言提供的关于缓冲的函数有:intflush(FILE*stream);intsetvbuf(FILE*stream,char*buf,intmode,size_tsize);/*缓冲模式mode有:1.无缓冲模式_IONBF2.行缓冲模式_IOLBF每收到一个换行符(/n或/r/n),就将缓冲flush掉3.全缓冲模式_IOFBF仅当缓冲满时才进行flush*/voidsetbuf(FILE*stream,char*buf);等价于(void)setvbuf(stream,buf,_IOBBF,BUFSIZ);fread的调用过程大概是:fread->fread_s(增加缓冲溢出保护,加锁)->_fread_nolock_s(循环读取,缓冲)->_read(换行符转换)->ReadFile(读取文件)加注释的FILE结构如下:struct_iobuf{char*_ptr;int_cnt;//剩余未读的字节数char*_base;//文件的缓冲基址int_flag;//打开文件的属性int_file;//打开文件的编号int_charbuf;int_bufsiz;//文件的缓冲的总的大小char*_tmpfname;};typedefstruct_iobufFILE;核心函数_fread_nolock_s(循环读取,缓冲)如下:size_t__cdecl_fread_nolock_s(void*buffer,size_tbufferSize,size_telementSize,size_tnum,FILE*stream){char*data;/*pointinsidethedestinationbuffertowhereweneedtocopythereadchars*/当前放进字节的尾部size_tdataSize;/*spaceleftinthedestionationbuffer(inbytes)//buffer中剩余字节数*/size_ttotal;/*totalbytestoread//总共要读的字节数*/size_tcount;/*numbyteslefttoread//剩下要读的字节数*/unsignedstreambufsize;/*sizeofstreambuffer*/unsignednbytes;/*howmuchtoreadnow*/unsignednread;/*howmuchwedidread*/intc;/*atempchar*//*initializelocalvars*/data=buffer;dataSize=bufferSize;if(elementSize==0||num==0){return0;}/*validation*/_VALIDATE_RETURN((buffer!=NULL),EINVAL,0);if(stream==NULL||num>(SIZE_MAX/elementSize)){if(bufferSize!=SIZE_MAX){memset(buffer,_BUFFER_FILL_PATTERN,bufferSize);}_VALIDATE_RETURN((stream!=NULL),EINVAL,0);_VALIDATE_RETURN(num<=(SIZE_MAX/elementSize),EINVAL,0);}count=total=elementSize*num;if(anybuf(stream)){/*alreadyhasbuffer,useitssize*/streambufsize=stream->_bufsiz;}else{/*assumewillget_INTERNAL_BUFSIZbuffer*/streambufsize=_INTERNAL_BUFSIZ;}/*hereisthemainloop--wegothroughhereuntilwe'redone*/while(count!=0){/*ifthebufferexistsandhascharacters,copythemtouserbuffer*/if(anybuf(stream)&&stream->_cnt!=0){if(stream->_cnt<0){_ASSERTE(("InconsistentStreamCount.Flushbetweenconsecutivereadandwrite",stream->_cnt>=0));stream->_flag|=_IOERR;return(total-count)/elementSize;}/*howmuchdowewant?(unsigned)count:stream->_cnt;if(nbytes>dataSize){if(bufferSize!=SIZE_MAX){memset(buffer,_BUFFER_FILL_PATTERN,bufferSize);}_VALIDATE_RETURN(("buffertoosmall",0),ERANGE,0)}memcpy_s(data,dataSize,stream->_ptr,nbytes);/*updatestreamandamtofdataread*/count-=nbytes;stream->_cnt-=nbytes;stream->_ptr+=nbytes;data+=nbytes;dataSize-=nbytes;}elseif(count>=streambufsize){/*Ifwehavemorethanstreambufsizecharstoread,getdatabycallingreadwithanintegralnumberofbufsizblocks.Notethatifthestreamistextmode,readwillreturnlesscharsthanweordered.*/if(streambufsize){/*In64bitappssize_tisbiggerthanunsigned*(whichis32bitevenin64bitmachines),so*weneedtosplitthereadintoINT_MAXchunks*since_read()onlysupportupto_signed_int*(eventhoughtheinparameterisunsigned).*/if(count>INT_MAX){/*calccharstoread--thelargestmultipleofstreambufsize*smallerthenINT_MAX*/nbytes=(unsigned)(INT_MAX-INT_MAX%streambufsize);}else{/*calccharstoread--(count/streambufsize)*streambufsize*/nbytes=(unsigned)(count-count%streambufsize);}}else{nbytes=(count>INT_MAX)?(unsigned)INT_MAX:(unsigned)count;}if(nbytes>dataSize){if(bufferSize!=SIZE_MAX){memset(buffer,_BUFFER_FILL_PATTERN,bufferSize);}_VALIDATE_RETURN(("buffertoosmall",0),ERANGE,0)}nread=_read(_fileno(stream),data,nbytes);if(nread==0){/*endoffile--outofhere*/stream->_flag|=_IOEOF;return(total-count)/elementSize;}elseif(nread==(unsigned)-1){/*error--outofhere*/stream->_flag|=_IOERR;return(total-count)/elementSize;}/*updatecountanddatatoreflectread*/count-=nread;data+=nread;dataSize-=nread;}else{/*lessthanstreambufsizecharstoread,socall_filbuftofillbuffer*/if((c=_filbuf(stream))==EOF){/*errororeof,streamflagssetby_filbuf*/return(total-count)/elementSize;}/*_filbufreturnedachar--storeit*/if(dataSize==0){if(bufferSize!=SIZE_MAX){memset(buffer,_BUFFER_FILL_PATTERN,bufferSize);}_VALIDATE_RETURN(("buffertoosmall",0),ERANGE,0)}*data++=(char)c;--count;--dataSize;/*updatebuffersize*/streambufsize=stream->_bufsiz;}}/*wefinishedsuccessfully,sojustreturnnum*/returnnum;}其中,int__cdecl_filwbuf(FILE*str)#endif/*_UNICODE*/{REG1FILE*stream=NULL;/*Insafecrt,weassumewealwayshaveabuffer*/_VALIDATE_RETURN(str!=NULL,EINVAL,_TEOF);/*Initpointerto_iob2entry.*/stream=str;if(!inuse(stream)||stream->_flag&_IOSTRG)return(_TEOF);if(stream->_flag&_IOWRT){stream->_flag|=_IOERR;return(_TEOF);}stream->_flag|=_IOREAD;/*Getabuffer,ifnecessary.*/if(!anybuf(stream)){#ifndef_SAFECRT_IMPL_getbuf(stream);#else/*_SAFECRT_IMPL*//*Insafecrt,weassumewealwayshaveabuffer*/_VALIDATE_RETURN(FALSE,EINVAL,_TEOF);#endif/*_SAFECRT_IMPL*/}else{stream->_ptr=stream->_base;}stream->_cnt=_read(_fileno(stream),stream->_base,stream->_bufsiz);#ifndef_UNICODEif((stream->_cnt==0)||(stream->_cnt==-1)){#else/*_UNICODE*/if((stream->_cnt==0)||(stream->_cnt==1)||stream->_cnt==-1){#endif/*_UNICODE*/stream->_flag|=stream->_cnt?_IOERR:_IOEOF;stream->_cnt=0;return(_TEOF);}if(!(stream->_flag&(_IOWRT|_IORW))&&((_osfile_safe(_fileno(stream))&(FTEXT|FEOFLAG))==(FTEXT|FEOFLAG)))stream->_flag|=_IOCTRLZ;/*Checkforsmall_bufsiz(_SMALL_BUFSIZ).Ifitissmallandifitisourbuffer,thenthismustbethefirst_filbufafteranfseekonaread-access-onlystream.Restore_bufsiztoitslargervalue(_INTERNAL_BUFSIZ)sothatthenext_filbufcall,ifoneismade,willfillthewholebuffer.*/if((stream->_bufsiz==_SMALL_BUFSIZ)&&(stream->_flag&_IOMYBUF)&&!(stream->_flag&_IOSETVBUF)){stream->_bufsiz=_INTERNAL_BUFSIZ;}#ifndef_UNICODEstream->_cnt--;return(0xff&*stream->_ptr++);#else/*_UNICODE*/stream->_cnt-=sizeof(wchar_t);return(0xffff&*((wchar_t*)(stream->_ptr))++);#endif/*_UNICODE*/}代码中分了三种情况:1)缓冲区不为空此时,把缓冲区中的数据复制到传入的字符数组中.2)缓冲区为空,需要读取的数据大于缓冲的尺寸此时,直接调用函数_fread把文件中的内容写到传入的字符数组中.3)缓冲区为空,需要读取的数据不大于缓冲的尺寸此时,调用函数_fread读满缓冲区,并再写缓冲区的一个字符到传入的字符数组中.若未读满传入的字符数组,循环执行上述1~3过程,直到读满或读到文件末尾(EOF).
怎样升级windows8系统怎样破解产品密钥32位:http://iso.esd.microsoft.com/W81RPI/8FBC5B738CFD9D29D6956B5DA9DF2DFD4F6C1D8AF/WindowsBlue-ClientwithApps-32bit-ChineseSimplified-X1899610.iso
64位:http://iso.esd.microsoft.com/W81RPI/8FBC5B738CFD9D29D6956B5DA9DF2DFD4F6C1D8AF/WindowsBlue-ClientwithApps-64bit-ChineseSimplified-X1899611.iso
激活码:NTTX3-RV7VB-T7X7F-WQYYY-9Y92F
为什么华硕电脑officewebApps不能用啊1.转换文档需要两台服务器,一台为转换server,另外一台为域控server。(安装officewebapps的服务器必须加域才能安装成功,如果没有加域后面步骤会出现错误,疑难问题里面会介绍)
2.系统要求为widowserver2008R264bitSP1或者以上,NETFramework4.5,KB2592525,WindowsPowerShell3.0,IIS,保证80443809端口不被占用,确保当前机器没有安装office,确保当前机器没有安装Exchange,sharepoint,lyncserver,sqlserver
3.服务器带宽和内存越高越好,测试发现比较耗性能,原因得从服务的实现原理上讲起。officewebapps服务会通过用户提供的文档src,从src服务器上把文档下载下来,然后进行转换,根据文档名称进行缓存,转换完成以后返回。带宽越大下载过程使用的时间越短,服务器性能越好转换速度越快。
如果你还想了解更多这方面的信息,记得收藏关注本站。
本文地址:http://www.cj8845.cn/13408.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。