ÄãµÄλÖãºÈí¼þ> Éè¼ÆÔÚÏß> ÍøÒ³ÌÕ°É> ¼¼Êõƽ̨> HTMLѧϰ>
ÓÃASPºÍVBScriptÉÏÔØÎļþ£¨Ò»£©
2000-07-19 00:00:00¡¤ ÇàÆ»¹ûµçÄÔ¹¤×÷ÊÒ¡¤Yesky

¡¡¡´Óä¯ÀÀÆ÷ÉÏÔØÎļþÊÇ´Ó¿Í»§»úÏò·þÎñÆ÷´«µÝÎļþµÄÒ»¸ö¼òÒ×·½·¨¡£´ÓµÚÈý´úä¯ÀÀÆ÷NetscapeºÍ MicrosoftÆð£¬¶àÊýä¯ÀÀÆ÷¶¼¿ÉÒÔÏò·þÎñÆ÷ÉÏÔØÎļþ£¬¶ø²»ÐèÒªÏòÓû§Ìá¹©ÌØÊâµÄ·ÃÎÊ·½Ê½»òÈí¼þ¡£

һЩASP×é¼þÊÇΪÎļþÉÏÔØ¶øÉè¼ÆµÄ£¬ÀýÈ磺
Posting Acceptor
£¨ Microsoft SiteServerµÄÒ»²¿·Ö£©,
AspSmartUpload£¨Advantys£©,
AspUpload £¨PersistsSoftware£©,
SA-FileUpSoftware Artisants£©

¡¡¡¡±¾ÎĵĿªÊ¼½«¸æËßÄã¹ØÓÚ´´½¨ÕâÀà×é¼þµÄÐÅÏ¢£¬¶øÕâЩ×é¼þͨ³£Ê¹ÓÃVB¡¢C£«£«»òJava¡£

¡¡¡¡ÕâЩ×é¼þµÄÎÊÌâÔÚÓÚËüÃÇÊǵÚÈý·½²úÆ·¶ø·Ç±ê×¼ASPµÄÒ»²¿·Ö¡£×÷ΪµÚÈý·½×é¼þ£¬±ØÐëÔÚ·þÎñÆ÷ÉϽøÐа²×°¡£Õâ¾ÍÒâζ×űØÐëÔÚ·þÎñÆ÷Éϸ´ÖÆDLL²¢×¢²á¡£´ó¶àÊýµÄÖ÷»úϵͳ²»ÔÊÐíÔÚËûÃǵķþÎñÆ÷ÉϽøÐÐÕâÑùµÄÉèÖã¬ÒòΪÓпÉÄÜ·¢ÉúÅäÖÃÎÊÌ⣨ÓÈÆäÊÇÐéÄâÖ÷»ú£©¡£µÚ¶þ¸öȱµãÊÇËüÃǴ󲿷ֲ»ÊÇÃâ·ÑµÄ£¬²»ÌṩԴ´úÂ룬Ҳ¾Í²»Äܸù¾ÝÐèÒª½øÐж¨ÖÆ¡£

¡¡¡¡Òò´ËÎÒÐèÒª±àдVBScript´úÂëÀ´½â¾öÎļþÉÏÔØµÄÎÊÌâ¡£Õâ²»ÊÇÒ»¸ö±ØÈ»µÄÑ¡Ôñ£¬ÒòΪVBScriptÊÇÒ»Öֽű¾ÓïÑÔ£¬Ö»ÄÜʹÓÃvariantsÊý¾ÝÀàÐÍ£¬²¢ÇÒ²»ÄÜÌṩÐí¶à¹ÜÀí¶þ½øÖÆÊý¾ÝºÍ×Ö½ÚÊý×éµÄÄÚÖú¯Êý¡£

¡¡¡¡ÒªÀí½âÉÏÔØµÄ¹ý³Ì£¬Ê×ÏÈÒªÖªµÀÊý¾ÝÓÃHTTPЭÒé´Óä¯ÀÀÆ÷·¢Ë͵½·þÎñÆ÷µÄ·½Ê½¡£Õâ¾ÍÒâζ×ÅÒªÀí½â¡° multipart/form-data¡± £¨¶à²¿·Ö/¸ñʽ-Êý¾Ý£©µÄ±íµ¥Ìá½»¡£

ÉÏÔØ±íµ¥

¡¡¡¡Í¨³£Çé¿öÏ£¬Ê¹ÓÃHTML±íµ¥´Óä¯ÀÀÆ÷Ïò·þÎñÆ÷´«µÝÊý¾Ý¡£Õâ¸ö±íµ¥ÖпÉÄܰüº¬Îı¾Óò¡¢¼ìÑé¿ò¡¢°´Å¥ÒÔ¼°ÉÏÔØÎļþµÄÎļþÀàÐÍ¿ØÖÆ¡£Ê¹ÓÃÕßÓÃ×Ô¼ºµÄÊý¾ÝÌî³ä²¢½«Õâ¸ö±íÌá½»¸ø·þÎñÆ÷¡£

¡¡¡¡±íµ¥ÔªËØÖÐµÄ enctype ÊôÐԹ涨ÁË´«µÝ¸ø·þÎñÆ÷µÄ±íÊý¾Ý¼¯±àÂëµÄÄÚÈÝÀàÐÍ¡£enctype ÊôÐÔµÄĬÈÏÖµÊÇ¡°application/x-www-form-urlencoded¡±£¬µ«µ±Ïò·þÎñÆ÷´«ËÍ´óÁ¿Îı¾¡¢°üº¬·ÇASCII×Ö·û»ò¶þ½øÖÆÊýµÄÊý¾Ýʱ£¬Õâ¸öĬÈÏÀàÐ;Ͳ»ÄÜʤÈÎÁË¡£Õâʱ£¬ÎļþÉÏÔØÌá½»±íµ¥Ê±Ó¦Ê¹Óá°multipart/form-data¡±ÄÚÈÝÀàÐÍ¡£

¡¡¡¡Ò»¸ö¡°multipart/form-data¡±ÐÅÏ¢°üº¬Ò»ÏµÁв¿¼þ£¬Ã¿¸ö²¿¼þ¶¼¿ÉÄܰüº¬£º
Ò»¸öContent-Disposition£¨ÄÚÈÝ-´¦Àí£©Í·£¬ÆäֵΪ"form-data" £»Ò»¸ö¹æ¶¨¿ØÖÆÃûµÄname£¨Ãû ©ÊôÐÔ¡£

¡¡¡¡¶ÔÓÚÒ»¸öÎļþÀàÐÍ¿ØÖÆ£¬Ò»¸ö²¿¼þ¿ÉÄܰüº¬¸ü¶àÐÅÏ¢£º
ÔÚ¿Í»§»úÉϹ涨ԭʼ·¾¶ºÍÎļþÃûµÄfilename£¨ÎļþÃû£©ÊôÐÔ£»Ëù·¢Ë͵Ķþ½øÖÆÊý¾Ý¿ØÖƵÄContent-Type £¨ÄÚÈÝ-ÀàÐÍ£©Í·¡£

¡¡¡¡ÔÚÕâЩͷµÄºóÃæ¸úËæ×Å¿ØÖƵĶþ½øÖÆ»òÎı¾ÄÚÈÝ¡£

¡¡¡¡ÒÔÏÂÀý×Ó˵Ã÷¡°multipart/form-data¡±µÄ±àÂ룬¿Í»§»úµÄä¯ÀÀÆ÷Ó¦ÓÐÕâ¸ö±íµ¥£º

Èç¹ûÕâ¸ö±íµ¥±»Ìá½»£¬ÔÚ·þÎñÆ÷ÉϿɶÁµ½ÕâЩÇëÇó£º

-----------------------------7cf87224d2020a
Content-Disposition: form-data; name£½"email"
PhCollignon@email.com
-----------------------------7cf87224d2020a
Content-Disposition: form-data; name£½"blob"; filename£½"c:\image.gif"
Content-Type: image/pjpeg

-----------------------------7cf87224d2020a
Content-Disposition: form-data; name£½"Enter"
Submit Query
-----------------------------7cf87224d2020a--

¡¡¡¡µ±ÄǸöÄÚÈÝ×÷ΪÏìÓ¦±»´«Ëͻؿͻ§»úʱ¾Í»á±»ÏÔʾ³öÀ´¡£Ó¦¸ÃÓÃRequest.binaryRead ºÍResponse.binaryWrite ·½·¨¶ÁºÍд¶þ½øÖÆÊý¾Ý¡£

¡´£¥
Response.BinaryWrite£¨Request.BinaryRead£¨Request.TotalBytes£©£©
£¥¡µ

¿ÉÒÔ¿´µ½ÏìÓ¦µÄ¸÷²¿·ÖÓ÷ֽçÏßÀ´»®·Ö£º
-----------------------------7cf87224d2020a
×îºóÒ»¸ö·Ö½çÏߺóÃæ¸úËæµÄÊÇ¡¯ -- ¡¯ ¡£

¡¡¡¡Ã¿Ò»¸ö¿ØÖƶ¼ÓÐÒ»¸öContent-Disposition ¡£nameÊôÐÔʶ±ðÓÉHTML±í·¢Ë͵ĿØÖÆ£¨email¡¢blobºÍEnter£©¡£ ¶ÔÓÚÒ»¸öÎļþÀàÐÍ¿ØÖÆ£¨blob£©,
ÎļþÃûÒ²ÊÇContent-Disposition Í·µÄÒ»²¿·Ö£¬Content-Type Í·¸ø³ö¶þ½øÖÆ Êý¾ÝµÄÄÚÈÝÀàÐÍ¡£

ÉÏÔØ½Å±¾

¡¡¡¡ÉÏÃæËùÓÐÄÚÈݶ¼±ØÐë¾­¹ý·Ö½â¡£ÔÚVB »ò C£«£«ÖÐ, Õâ·Ç³£Ã÷ÏÔ£¬ÒòΪΪ´ËÌṩÁËÐí¶à¶ÔÏóºÍ·½·¨¡£ÔÚVBScript ÖУ¬±ØÐëʹÓÃÓïÑÔËùÌṩµÄһЩº¯Êý£¬²¢Òª½â¾öVBScriptÖÐʹÓõÄË«×Ö½Ú±àÂëµÄ±äÁ¿×Ö·û´®µÄÎÊÌâ¡£

VBScriptº¯Êý

¡¡¡¡Ô­Ê¼Êý¾ÝÊǶþ½øÖƸñʽ£¬ËùÒÔ±ØÐëʹÓÃרΪ¹ÜÀí¶þ½øÖÆÊý¾Ý¶øÉè¼ÆµÄVBScriptº¯Êý¡£ÒòΪÎÒÃǽ«Ô­Ê¼Êý¾Ý×÷Ϊһ¸ö×Ö½ÚµÄ×Ö·û´®À´¿¼ÂÇ£¬ ËùÒÔ MidB¡¢InstrB ºÍ LenB º¯Êý¾ÍÓÐÓÃÁË¡£ µ«ÊÇÒª±ÜÃâVBScriptµÄclassic×Ö·û´®£¬ÒòΪËüÃÇÊÇË«×Ö½Ú±àÂëµÄ×Ö·û´®£¬²»ÊÊÒË·Ö½â³Éµ¥×Ö½Ú¡£

¡¡¡¡ÕâЩÊÇVBScriptº¯ÊýÖнöÓеÄÓÃÀ´·Ö½â×ֽڵĺ¯Êý¡£»¹ÐèÒªÒ»¸ö·½·¨£¬´Ó±»·Ö½âµÄÊý¾ÝÖеõ½Ë«×Ö½Ú±àÂëµÄ×Ö·û´®£¬ÕâÑù¾Í¿ÉÒÔʹÓÃVBScript±àÂëÖеÄ×Ö·û´®ÁË¡£ÎªÁËÔÚInstrBÖаÑ×Ö·û´®×÷Ϊһ¸ö×Ô±äÁ¿Ê¹Ó㬻¹ÐèÒªÒ»¸öº¯Êý£¬°ÑË«×Ö½Ú×Ö·û´®×ª»»³Éµ¥×Ö½Ú×Ö·û´®¡£

¡¡¡¡ÎªÁËÎÒдÁËÁ½¸öº¯Êý£¬getString£¨£© ºÍ getByteString£¨£©£¬ÉÔºóÔٶԴ˽øÐнâÊÍ¡£

½á¹¹

¡¡¡¡·Ö½âµÄÊý¾Ý±»´æ´¢ÔÚVBScript Dictionary ¶ÔÏóÖС£ Dictionary ¶ÔÏóÊÇhash ±í¶ÔÏó£¬Ëü´æ´¢£¨key, item£©¶Ô¡£ËüÊÇVBScriptºÍASP2.0µÄÒ»²¿·Ö¡£

¡¡¡¡¶¨ÒåµÚÒ»¸öDictionary ¶ÔÏó " UploadRequest " ¡£Õâ¸ö¶ÔÏó°üº¬ÓÉÉÏÔØ±íÌá½»µÄËùÓпØÖÆ¡£KeyÊÇ¿ØÖƵÄÃû×Ö£¬ItemÔòÊǶÔÏóÖÐËù°üº¬µÄ¿ØÖƵÄÐÅÏ¢£º
"ControlName1", Dictionary control1
"ControlName2", Dictionary control2

¡¡¡¡´ú±íÒ»¸ö¿ØÖƵÄDictionary ¶ÔÏó°üº¬×ÅÏÂÃæµÄ£¨key, item£© ¶Ô£º
"Value", String or binary content
"FileName", Name of uploaded file
"ContentType", ContentType of uploaded file

¡¡¡¡°ÑÕâЩ½áºÏÆðÀ´£¬¾ÍÓÐÒÔÏÂÀý×Ó£º

UploadRequest : "email", UploadControl 1 : "Value", PhCollignon@email.com
"blob" , UploadControl 2 : "filename", C:/image/file.gif "ContentType" :
image/gif "Value" : GIF89ai?
Õâ¸ö¶ÔÏó¶ÔÓÚÒÔºó´æÈ¡ºÍʹÓÃÊý¾Ý·Ç³£ÓÐÓá£

·Ö½â


¡¡¡¡ÕâÀïÊǷֽ⡢¶ÁºÍ¼Ç¼ÉÏÔØ¿ØÖƵĴúÂë¡£Õâ¸ö¹ý³ÌÓÃ"BuildUploadRequest"³ÌÐòÀ´Íê³É£¬Õâ¸ö³ÌÐòÖ»ÓÐÒ»¸ö×Ô±äÁ¿£¬¾ÍÊÇԭʼ¶þ½øÖÆÊý¾ÝRequestBin¡£

Sub BuildUploadRequest£¨RequestBin£©

¡¡¡¡Ê×ÏÈÒªÕÒµ½·Ö½çÏߣ¬Í¨¹ý·Ö½çÏß¿ÉÒÔÖªµÀ¿ØÖÆÑ­»·ºÎʱ½áÊø¡£

¡¯Get the boundary PosBeg £½ 1 PosEnd £½ InstrB£¨PosBeg,RequestBin,getByteString£¨chr£¨13£©£©£©
boundary £½ MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£© boundaryPos £½ InstrB£¨1,RequestBin,boundary£©

¡¡¡¡ÓÐÒ»¸öÎÊÌâÊÇInstrBÐèÒªµ¥×Ö½Ú×Ö·û´®×÷Ϊ×Ô±äÁ¿¡£Îª´ËдÁËÒ»¸öº¯Êý£ºgetByteString£¨String£© £¬´Ë·½·¨¿ÉÒÔ°ÑVBScriptµÄË«×Ö½Ú×Ö·û´®×ª»»³Éµ¥×Ö½Ú×Ö·û´®¡£ÔÚ´úÂë½âÊ͵Ä×îºóÔÙÃèÊöÕâ¸öº¯Êý¡£

ÔÚÕÒµ½½áÊø·Ö½çÏß֮ǰ½øÐÐÏÂÁÐÑ­»·£º
¡¯Get all data inside the boundaries
Do until £¨boundaryPos£½InstrB£¨RequestBin,boundary & getByteString£¨"--"£©£©£©

¡¡¡¡Ñ­»·ÖеÄÿһ²½¶¼´¦ÀíÒ»¸ö¿ØÖÆ¡£ÓйØÕâÒ»¿ØÖƵÄËùÓÐÊý¾Ý¶¼±£´æÔÚdictionary¶ÔÏóÖС£Ã¿Ò»¸öÑ­»·´´½¨Ò»¸öеÄdictionary¶ÔÏóUploadControl¡£

¡¯Members variable of objects are put in a dictionary object Dim UploadControl
Set UploadControl £½ CreateObject£¨"Scripting.Dictionary"£©

¡¡¡¡Ê×ÏÈ´Ó" Content-Disposition " Í·ÖÐÕÒµ½¿ØÖƵÄÃû×Ö¡£Ãû×ֵĽáβÓÃ"×Ö·û»òchr£¨34£©»®·Ö¡£
¡¯Get an object name Pos £½ InstrB£¨BoundaryPos,RequestBin,getByteString£¨"Content-Disposition"£©£©
Pos £½ InstrB£¨Pos,RequestBin,getByteString£¨"name£½"£©£© PosBeg £½ Pos£«6 PosEnd
£½ InstrB£¨PosBeg,RequestBin,getByteString£¨chr£¨34£©£©£© Name £½ getString£¨MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£©£©

¡¡¡¡ÏÖÔÚ²âÊÔ¿ØÖÆÊÇÎļþÀà¿ØÖÆ»¹ÊÇÎı¾Àà¿ØÖÆ¡£Èç¹ûÊÇÎı¾Àà¿ØÖÆ£¬³ýÁËËüµÄÃû×ÖÒÔÍâûÓÐÆäËüÈκÎÊý¾Ý¡£ Èç¹ûÊÇÎļþÀà¿ØÖÆ£¬¾Í»áµÃµ½Ò»Ð©¶îÍâÐÅÏ¢£¬ÈçÎļþÃûºÍContent-Type¡£

PosFile£½InstrB£¨BoundaryPos,RequestBin,getByteString£¨"filename£½"£©£© PosBound
£½ InstrB£¨PosEnd,RequestBin,boundary£© ¡¯Test if object is of file type If
PosFile¡´¡µ0 AND £¨PosFile¡´PosBound£©

¡¡¡¡Then Èç¹ûÊÇ¿ØÖÆÊÇÎļþÀà¿ØÖÆ£¬¾Í½«Â·¾¶ºÍÎļþÃû½øÐзֽ⣬²¢½«ËûÃÇÌî¼Óµ½¿ØÖƵÄdictionary ¶ÔÏóÖС£·Ö½âºóµÄÎļþÃûÊÇÒ»¸öµ¥×Ö½Ú×Ö·û´®£¬Òª½«Ëüת»»³ÉË«×Ö½Ú×Ö·û´®²ÅÄÜ×÷Ϊvariant×Ö·û´®±äÁ¿Ê¹Óá£Õâͨ¹ý×îºó¶¨ÒåµÄgetString£¨£©·½·¨À´ÊµÏÖ£º

¡¯Get Filename, content-type and content of file PosBeg £½ PosFile £« 10 PosEnd
£½ InstrB£¨PosBeg,RequestBin,getByteString£¨chr£¨34£©£©£© FileName £½ getString£¨MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£©£©
¡¯Add filename to dictionary object UploadControl.Add "FileName", FileName
Pos £½ InstrB£¨PosEnd,RequestBin,getByteString£¨"Content-Type:"£©£© PosBeg £½
Pos£«14 PosEnd £½ InstrB£¨PosBeg,RequestBin,getByteString£¨chr£¨13£©£©£© ¡¯Add content-type
to dictionary object ContentType £½ getString£¨MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£©£©

¡¡¡¡UploadControl.Add "ContentType",ContentType ÏÖÔھͿÉÒԵõ½ÎļþµÄºËÐÄÄÚÈÝÁË¡£Õâ¸öÄÚÈݲ»ÐèҪת»»£¬ÒòΪËüÊǶþ½øÖƵġ£¿ÉÒÔ½«Ëü´æÈëÒ»¸öÎļþϵͳ»ò×÷Ϊһ¸ö¶þ½øÖƳ¤¶ÔÏó£¨blob£©·ÅÈëÊý¾Ý¿âÖС£

¡¯Get content of object PosBeg £½ PosEnd£«4 PosEnd £½ InstrB£¨PosBeg,RequestBin,boundary£©-2
Value £½ MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£©

¡¡¡¡Else Èç¹ûÊÇÎı¾Àà¿ØÖÆ£¬³ýÁËÄÚÈÝÒÔÍâ¾ÍûÓÐÆäËüÊý¾ÝÐèÒª·Ö½â¡£ÄÚÈÝҪת»»³ÉΪ˫×Ö½Ú×Ö·û´®£¬ÒԱ㽫À´Óà ÔÚVBScript´úÂëÖС£

¡¯Get content of object Pos £½ InstrB£¨Pos,RequestBin,getByteString£¨chr£¨13£©£©£©
PosBeg £½ Pos£«4 PosEnd £½ InstrB£¨PosBeg,RequestBin,boundary£©-2 Value £½ getString£¨MidB£¨RequestBin,PosBeg,PosEnd-PosBeg£©£©
End If

¡¡¡¡½«ÄÚÈݼÓÈëdictionary¶ÔÏóÖС£½«keyÉèÖÃ³É " Value ",ÄÇôitem ¾ÍÊÇÄÚÈÝ¡£¸ù¾Ý¿ØÖÆÀàÐ͵IJ»Í¬£¬ÄÚÈÝ¿ÉÒÔÊÇ×Ö·û´®»ò¶þ½øÖÆÊý¾Ý¡£

¡¯Add content to dictionary object
UploadControl.Add "Value" , Value

¡¡¡¡×îºó½«¿ØÖƵÄdictionary ¶ÔÏó¼ÓÈëÒ»¸öÈ«³Ìdictionary ¶ÔÏóÖС£Ê¹ÓõÄkey ÊÇ¿ØÖƵÄÃû×Ö¡£item ÊǸոմ´½¨µÄdictionary¶ÔÏó£¬ÃûΪUploadControl¡£

¡¯Add dictionary object to main dictionary UploadRequest.Add name, UploadControl
¡¯Loop to next object BoundaryPos£½InstrB£¨BoundaryPos£«LenB£¨boundary£©,RequestBin,boundary£©
Loop End Sub

×Ö½Ú-×Ö·û´®×ª»»º¯Êý

ÏÂÃæÊǽ«Ë«×Ö½Ú×Ö·û´®×ª»»³Éµ¥×Ö½Ú×Ö·û´®µÄº¯Êý¡£

¡¯Byte string to string conversion Function getString£¨StringBin£© getString
£½"" For intCount £½ 1 to LenB£¨StringBin£© getString £½ getString & chr£¨AscB£¨MidB£¨StringBin,intCount,1£©£©£©
Next End Function ÏÂÃæÊǽ«×Ö·û´®×ª»»³Éµ¥×Ö½Ú×Ö·û´®µÄº¯Êý£¬ËüÓÃÀ´¸ñʽ»¯InstrBº¯ÊýµÄ×Ô±äÁ¿¡£

¡¯String to byte string conversion Function getByteString£¨StringStr£© For
i £½ 1 to Len£¨StringStr£© char £½ Mid£¨StringStr,i,1£© getByteString £½ getByteString
& chrB£¨AscB£¨char£©£© Next End Function


¡¾·¢±íÆÀÂÛ¡¿¡¾¹Ø±Õ´°¿Ú¡¿


.ÓÃASP¿ª·¢Ò»¸öÔÚÏß¿¼ÊÔ³ÌÐò£¨Ò»£©
.ÈçºÎÖÆ×÷ÎÞ״̬µÄASP×é¼þ
.¸ß¼¶±íµ¥ÑéÖ¤
.ÓÃASPºÍVBScriptÉÏÔØÎļþ£¨¶þ£©