delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达

delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达

一、uses REST.Types;

//var
  //DefaultRESTRequestParameterKind: TRESTRequestParameterKind = TRESTRequestParameterKind.pkGETorPOST;

//function RESTRequestParameterKindToString(const AKind: TRESTRequestParameterKind): string;
//function RESTRequestParameterKindFromString(const AKindString: string): TRESTRequestParameterKind;

type
  /// <summary>
  /// Content
  /// </summary>
  TRESTContentType = (ctNone, ctAPPLICATION_ATOM_XML, ctAPPLICATION_ECMASCRIPT, ctAPPLICATION_EDI_X12,
    ctAPPLICATION_EDIFACT, ctAPPLICATION_JSON, ctAPPLICATION_JAVASCRIPT, ctAPPLICATION_OCTET_STREAM, ctAPPLICATION_OGG,
    ctAPPLICATION_PDF, ctAPPLICATION_POSTSCRIPT, ctAPPLICATION_RDF_XML, ctAPPLICATION_RSS_XML, ctAPPLICATION_SOAP_XML,
    ctAPPLICATION_FONT_WOFF, ctAPPLICATION_XHTML_XML, ctAPPLICATION_XML, ctAPPLICATION_XML_DTD, ctAPPLICATION_XOP_XML,
    ctAPPLICATION_ZIP, ctAPPLICATION_GZIP, ctTEXT_CMD, ctTEXT_CSS, ctTEXT_CSV, ctTEXT_HTML, ctTEXT_JAVASCRIPT,
    ctTEXT_PLAIN, ctTEXT_VCARD, ctTEXT_XML, ctAUDIO_BASIC, ctAUDIO_L24, ctAUDIO_MP4, ctAUDIO_MPEG, ctAUDIO_OGG,
    ctAUDIO_VORBIS, ctAUDIO_VND_RN_REALAUDIO, ctAUDIO_VND_WAVE, ctAUDIO_WEBM, ctIMAGE_GIF, ctIMAGE_JPEG, ctIMAGE_PJPEG,
    ctIMAGE_PNG, ctIMAGE_SVG_XML, ctIMAGE_TIFF, ctMESSAGE_HTTP, ctMESSAGE_IMDN_XML, ctMESSAGE_PARTIAL, ctMESSAGE_RFC822,
    ctMODEL_EXAMPLE, ctMODEL_IGES, ctMODEL_MESH, ctMODEL_VRML, ctMODEL_X3D_BINARY, ctMODEL_X3D_VRML, ctMODEL_X3D_XML,
    ctMULTIPART_MIXED, ctMULTIPART_ALTERNATIVE, ctMULTIPART_RELATED, ctMULTIPART_FORM_DATA, ctMULTIPART_SIGNED,
    ctMULTIPART_ENCRYPTED, ctVIDEO_MPEG, ctVIDEO_MP4, ctVIDEO_OGG, ctVIDEO_QUICKTIME, ctVIDEO_WEBM, ctVIDEO_X_MATROSKA,
    ctVIDEO_X_MS_WMV, ctVIDEO_X_FLV, ctAPPLICATION_VND_OASIS_OPENDOCUMENT_TEXT,
    ctAPPLICATION_VND_OASIS_OPENDOCUMENT_SPREADSHEET, ctAPPLICATION_VND_OASIS_OPENDOCUMENT_PRESENTATION,
    ctAPPLICATION_VND_OASIS_OPENDOCUMENT_GRAPHICS, ctAPPLICATION_VND_MS_EXCEL,
    ctAPPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET, ctAPPLICATION_VND_MS_POWERPOINT,
    ctAPPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_PRESENTATIONML_PRESENTATION,
    ctAPPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT, ctAPPLICATION_VND_MOZILLA_XUL_XML,
    ctAPPLICATION_VND_GOOGLE_EARTH_KML_XML, ctAPPLICATION_VND_GOOGLE_EARTH_KMZ, ctAPPLICATION_VND_DART,
    ctAPPLICATION_VND_ANDROID_PACKAGE_ARCHIVE, ctAPPLICATION_X_DEB, ctAPPLICATION_X_DVI, ctAPPLICATION_X_FONT_TTF,
    ctAPPLICATION_X_JAVASCRIPT, ctAPPLICATION_X_LATEX, ctAPPLICATION_X_MPEGURL, ctAPPLICATION_X_RAR_COMPRESSED,
    ctAPPLICATION_X_SHOCKWAVE_FLASH, ctAPPLICATION_X_STUFFIT, ctAPPLICATION_X_TAR, ctAPPLICATION_X_WWW_FORM_URLENCODED,
    ctAPPLICATION_X_XPINSTALL, ctAUDIO_X_AAC, ctAUDIO_X_CAF, ctIMAGE_X_XCF, ctTEXT_X_GWT_RPC, ctTEXT_X_JQUERY_TMPL,
    ctTEXT_X_MARKDOWN, ctAPPLICATION_X_PKCS12, ctAPPLICATION_X_PKCS7_CERTIFICATES, ctAPPLICATION_X_PKCS7_CERTREQRESP,
    ctAPPLICATION_X_PKCS7_MIME, ctAPPLICATION_X_PKCS7_SIGNATURE, ctAPPLICATION_VND_EMBARCADERO_FIREDAC_JSON);

var
  DefaultRESTContentType: TRESTContentType = TRESTContentType.ctNone;

const
  /// <summary>
  /// HTTP Content-Type (or MIME Types as per RFC 2046) headerDefinitions.
  /// </summary>
  /// <remarks>
  /// <para>
  /// See: http://tools.ietf.org/html/rfc2046
  /// </para>
  /// <para>
  /// Values collected from https://en.wikipedia.org/wiki/MIME_type
  /// </para>
  /// </remarks> 

//注:以下这些仅为delphi内置的常用的Content-Type(or MIME Types as per RFC 2046),剩余的在你应用时自行添加其数值,比如:应用程序安装包的Content-Type  :'application/vnd.android.package-archive'

  CONTENTTYPE_NONE = ''; // do not localize
  // Type Application 
  CONTENTTYPE_APPLICATION_ATOM_XML = 'application/atom+xml'; // do not localize
  CONTENTTYPE_APPLICATION_ECMASCRIPT = 'application/ecmascript'; // do not localize
  CONTENTTYPE_APPLICATION_EDI_X12 = 'application/EDI-X12'; // do not localize
  CONTENTTYPE_APPLICATION_EDIFACT = 'application/EDIFACT'; // do not localize
  CONTENTTYPE_APPLICATION_JSON = 'application/json'; // do not localize
  CONTENTTYPE_APPLICATION_JAVASCRIPT = 'application/javascript'; // do not localize
  CONTENTTYPE_APPLICATION_OCTET_STREAM = 'application/octet-stream'; // do not localize    //:IOS应用程序包的压缩文档,对应的文件扩展名为ipa
  CONTENTTYPE_APPLICATION_OGG = 'application/ogg'; // do not localize
  CONTENTTYPE_APPLICATION_PDF = 'application/pdf'; // do not localize
  CONTENTTYPE_APPLICATION_POSTSCRIPT = 'application/postscript'; // do not localize
  CONTENTTYPE_APPLICATION_RDF_XML = 'application/rdf+xml'; // do not localize
  CONTENTTYPE_APPLICATION_RSS_XML = 'application/rss+xml'; // do not localize
  CONTENTTYPE_APPLICATION_SOAP_XML = 'application/soap+xml'; // do not localize
  CONTENTTYPE_APPLICATION_FONT_WOFF = 'application/font-woff'; // do not localize
  CONTENTTYPE_APPLICATION_XHTML_XML = 'application/xhtml+xml'; // do not localize
  CONTENTTYPE_APPLICATION_XML = 'application/xml'; // do not localize
  CONTENTTYPE_APPLICATION_XML_DTD = 'application/xml-dtd'; // do not localize
  CONTENTTYPE_APPLICATION_XOP_XML = 'application/xop+xml'; // do not localize
  CONTENTTYPE_APPLICATION_ZIP = 'application/zip'; // do not localize
  CONTENTTYPE_APPLICATION_GZIP = 'application/gzip'; // do not localize
  // Type Text
  CONTENTTYPE_TEXT_CMD = 'text/cmd'; // do not localize
  CONTENTTYPE_TEXT_CSS = 'text/css'; // do not localize
  CONTENTTYPE_TEXT_CSV = 'text/csv'; // do not localize
  CONTENTTYPE_TEXT_HTML = 'text/html'; // do not localize
  CONTENTTYPE_TEXT_JAVASCRIPT = 'text/javascript'; // do not localize
  CONTENTTYPE_TEXT_PLAIN = 'text/plain'; // do not localize
  CONTENTTYPE_TEXT_VCARD = 'text/vcard'; // do not localize
  CONTENTTYPE_TEXT_XML = 'text/xml'; // do not localize
  // Type Audio
  CONTENTTYPE_AUDIO_BASIC = 'audio/basic'; // do not localize
  CONTENTTYPE_AUDIO_L24 = 'audio/L24'; // do not localize
  CONTENTTYPE_AUDIO_MP4 = 'audio/mp4'; // do not localize
  CONTENTTYPE_AUDIO_MPEG = 'audio/mpeg'; // do not localize
  CONTENTTYPE_AUDIO_OGG = 'audio/ogg'; // do not localize
  CONTENTTYPE_AUDIO_VORBIS = 'audio/vorbis'; // do not localize
  CONTENTTYPE_AUDIO_VND_RN_REALAUDIO = 'audio/vnd.rn-realaudio'; // do not localize
  CONTENTTYPE_AUDIO_VND_WAVE = 'audio/vnd.wave'; // do not localize
  CONTENTTYPE_AUDIO_WEBM = 'audio/webm'; // do not localize
  // Type Image
  CONTENTTYPE_IMAGE_GIF = 'image/gif'; // do not localize
  CONTENTTYPE_IMAGE_JPEG = 'image/jpeg'; // do not localize
  CONTENTTYPE_IMAGE_PJPEG = 'image/pjpeg'; // do not localize
  CONTENTTYPE_IMAGE_PNG = 'image/png'; // do not localize
  CONTENTTYPE_IMAGE_SVG_XML = 'image/svg+xml'; // do not localize
  CONTENTTYPE_IMAGE_TIFF = 'image/tiff'; // do not localize
  // Type Message
  CONTENTTYPE_MESSAGE_HTTP = 'message/http'; // do not localize
  CONTENTTYPE_MESSAGE_IMDN_XML = 'message/imdn+xml'; // do not localize
  CONTENTTYPE_MESSAGE_PARTIAL = 'message/partial'; // do not localize
  CONTENTTYPE_MESSAGE_RFC822 = 'message/rfc822'; // do not localize
  // Type Model (3D Models)
  CONTENTTYPE_MODEL_EXAMPLE = 'model/example'; // do not localize
  CONTENTTYPE_MODEL_IGES = 'model/iges'; // do not localize
  CONTENTTYPE_MODEL_MESH = 'model/mesh'; // do not localize
  CONTENTTYPE_MODEL_VRML = 'model/vrml'; // do not localize
  CONTENTTYPE_MODEL_X3D_BINARY = 'model/x3d+binary'; // do not localize
  CONTENTTYPE_MODEL_X3D_VRML = 'model/x3d+vrml'; // do not localize
  CONTENTTYPE_MODEL_X3D_XML = 'model/x3d+xml'; // do not localize
  // Type Multipart
  CONTENTTYPE_MULTIPART_MIXED = 'multipart/mixed'; // do not localize
  CONTENTTYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative'; // do not localize
  CONTENTTYPE_MULTIPART_RELATED = 'multipart/related'; // do not localize
  CONTENTTYPE_MULTIPART_FORM_DATA = 'multipart/form-data'; // do not localize
  CONTENTTYPE_MULTIPART_SIGNED = 'multipart/signed'; // do not localize
  CONTENTTYPE_MULTIPART_ENCRYPTED = 'multipart/encrypted'; // do not localize
  // Type Video
  CONTENTTYPE_VIDEO_MPEG = 'video/mpeg'; // do not localize
  CONTENTTYPE_VIDEO_MP4 = 'video/mp4'; // do not localize
  CONTENTTYPE_VIDEO_OGG = 'video/ogg'; // do not localize
  CONTENTTYPE_VIDEO_QUICKTIME = 'video/quicktime'; // do not localize
  CONTENTTYPE_VIDEO_WEBM = 'video/webm'; // do not localize
  CONTENTTYPE_VIDEO_X_MATROSKA = 'video/x-matroska'; // do not localize
  CONTENTTYPE_VIDEO_X_MS_WMV = 'video/x-ms-wmv'; // do not localize
  CONTENTTYPE_VIDEO_X_FLV = 'video/x-flv'; // do not localize
  // Type Application - Vendor Specific
  CONTENTTYPE_APPLICATION_VND_OASIS_OPENDOCUMENT_TEXT = 'application/vnd.oasis.opendocument.text'; // do not localize
  CONTENTTYPE_APPLICATION_VND_OASIS_OPENDOCUMENT_SPREADSHEET = 'application/vnd.oasis.opendocument.spreadsheet';
  // do not localize
  CONTENTTYPE_APPLICATION_VND_OASIS_OPENDOCUMENT_PRESENTATION = 'application/vnd.oasis.opendocument.presentation';
  // do not localize
  CONTENTTYPE_APPLICATION_VND_OASIS_OPENDOCUMENT_GRAPHICS = 'application/vnd.oasis.opendocument.graphics';
  // do not localize
  CONTENTTYPE_APPLICATION_VND_MS_EXCEL = 'application/vnd.ms-excel'; // do not localize
  CONTENTTYPE_APPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET =
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; // do not localize
  CONTENTTYPE_APPLICATION_VND_MS_POWERPOINT = 'application/vnd.ms-powerpoint'; // do not localize
  CONTENTTYPE_APPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_PRESENTATIONML_PRESENTATION =
    'application/vnd.openxmlformats-officedocument.presentationml.presentation'; // do not localize
  CONTENTTYPE_APPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT =
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; // do not localize
  CONTENTTYPE_APPLICATION_VND_MOZILLA_XUL_XML = 'application/vnd.mozilla.xul+xml'; // do not localize
  CONTENTTYPE_APPLICATION_VND_GOOGLE_EARTH_KML_XML = 'application/vnd.google-earth.kml+xml'; // do not localize
  CONTENTTYPE_APPLICATION_VND_GOOGLE_EARTH_KMZ = 'application/vnd.google-earth.kmz'; // do not localize
  CONTENTTYPE_APPLICATION_VND_DART = 'application/vnd.dart'; // do not localize
  CONTENTTYPE_APPLICATION_VND_ANDROID_PACKAGE_ARCHIVE = 'application/vnd.android.package-archive'; // do not localize  //:Android应用程序包的压缩文档,对应的文件扩展名为apk
  // Type X (RFC 6648)
  CONTENTTYPE_APPLICATION_X_DEB = 'application/x-deb'; // do not localize
  CONTENTTYPE_APPLICATION_X_DVI = 'application/x-dvi'; // do not localize
  CONTENTTYPE_APPLICATION_X_FONT_TTF = 'application/x-font-ttf'; // do not localize
  CONTENTTYPE_APPLICATION_X_JAVASCRIPT = 'application/x-javascript'; // do not localize
  CONTENTTYPE_APPLICATION_X_LATEX = 'application/x-latex'; // do not localize
  CONTENTTYPE_APPLICATION_X_MPEGURL = 'application/x-mpegURL'; // do not localize
  CONTENTTYPE_APPLICATION_X_RAR_COMPRESSED = 'application/x-rar-compressed'; // do not localize//rar压缩文档
  CONTENTTYPE_APPLICATION_X_SHOCKWAVE_FLASH = 'application/x-shockwave-flash'; // do not localize
  CONTENTTYPE_APPLICATION_X_STUFFIT = 'application/x-stuffit'; // do not localize  //:网络压缩解压文档
  CONTENTTYPE_APPLICATION_X_TAR = 'application/x-tar'; // do not localize  //:Unix系统上的压缩打包文档
  CONTENTTYPE_APPLICATION_X_WWW_FORM_URLENCODED = 'application/x-www-form-urlencoded'; // do not localize
  CONTENTTYPE_APPLICATION_X_XPINSTALL = 'application/x-xpinstall'; // do not localize
  CONTENTTYPE_AUDIO_X_AAC = 'audio/x-aac'; // do not localize  //:常用于IOS的音频文件(Advanced Audio Coding),中文名:高级音频编码
  CONTENTTYPE_AUDIO_X_CAF = 'audio/x-caf'; // do not localize
  CONTENTTYPE_IMAGE_X_XCF = 'image/x-xcf'; // do not localize
  CONTENTTYPE_TEXT_X_GWT_RPC = 'text/x-gwt-rpc'; // do not localize
  CONTENTTYPE_TEXT_X_JQUERY_TMPL = 'text/x-jquery-tmpl'; // do not localize
  CONTENTTYPE_TEXT_X_MARKDOWN = 'text/x-markdown'; // do not localize
  // Type PKCS (Cryptography)密码包
  CONTENTTYPE_APPLICATION_X_PKCS12 = 'application/x-pkcs12'; // do not localize  //:密码包
  CONTENTTYPE_APPLICATION_X_PKCS7_CERTIFICATES = 'application/x-pkcs7-certificates'; // do not localize  //:密码包证书文件
  CONTENTTYPE_APPLICATION_X_PKCS7_CERTREQRESP = 'application/x-pkcs7-certreqresp'; // do not localize  //:密码包请求和相应文件
  CONTENTTYPE_APPLICATION_X_PKCS7_MIME = 'application/x-pkcs7-mime'; // do not localize //:密码包mime
  CONTENTTYPE_APPLICATION_X_PKCS7_SIGNATURE = 'application/x-pkcs7-signature'; // do not localize//:密码包签名文件
  // Type Application - Embarcadero Specific
  CONTENTTYPE_APPLICATION_VND_EMBARCADERO_FIREDAC_JSON = 'application/vnd.embarcadero.firedac+json'; // do not localize  //: End-to-End FireDAC JSON Reflection :数据库的对象<->应用服务器对象<->客户端的对象:端对端的反映射

// :官方下载:  http://cc.embarcadero.com/item/29916  :使用企业移动性服务构建现代应用程序”网络研讨会演示者的DataSnap“Customers”  端到端FireDAC JSON反射演示代码于2014年8月20日上线。
下载内容包含一个包含DataSnap服务器和移动DataSnap的项目组使用InterBase,FireDAC,JSON,REST和Reflection的客户端项目,以实现简单的多层数据库系统。

function ContentTypeToString(AContentType: TRESTContentType): string;
function ContentTypeFromString(const AContentType: string): TRESTContentType;

function IsTextualContentType(AContentType: TRESTContentType) : boolean; overload;
function IsTextualContentType(const AContentType: string) : boolean; overload;
 

//var
  //DefaultRESTRequestMethod: TRESTRequestMethod = TRESTRequestMethod.rmGET;

//function RESTRequestMethodToString(const AMethod: TRESTRequestMethod): string;
 

二、uses System.Net.Mime;

type
  /// <summary>Class to manage multipart form data</summary>

TMultipartFormData = class (TObject)

TMimeTypes = class (TObject)

  public
    constructor Create;
    destructor Destroy; override;
    function GetFileInfo(const AFileName: string; out AType: string; out AKind: TKind): Boolean; //:获取任意文件名的MimeType
    function GetExtInfo(const AExt: string; out AType: string; out AKind: TKind): Boolean; //:获取任意文件扩展名的MimeType
    function GetTypeInfo(const AType: string; out AExt: string; out AKind: TKind): Boolean; //:根据MimeType获取文件扩展名
    procedure Clear;
    procedure AddDefTypes; 
    procedure AddOSTypes;
    procedure AddType(const AExt, AType: string; AKind: TKind = TKind.Undefined; AIgnoreDups: Boolean = False);
    procedure ForAll(const AExtMask, ATypeMask: string; AFunc: TIterateFunc);
    procedure ForExts(const AExtMask: string; AFunc: TIterateFunc);
    procedure ForTypes(const ATypeMask: string; AFunc: TIterateFunc);
    class property Default: TMimeTypes read GetDefault;
  end;

TAcceptValueItem = class (TObject)

TAcceptValueListBase<T: TAcceptValueItem, constructor> = class (TObject)

TAcceptValueList = TAcceptValueListBase<TAcceptValueItem>;   //:枚举Accept名、权值和参数

THeaderValueList = class (TObject)  //:访问Header头值信息的类,比如你对www的头不了解,可以用此捕获所有头的参数:

  public
    constructor Create; overload;
    constructor Create(const AValue: string); overload;
    destructor Destroy; override;
    procedure Clear;
    procedure Delete(AIndex: Integer);
    procedure Add(const AName: string); overload;
    procedure Add(const AName, AValue: string; AQuoteVal: Boolean = True); overload;
    procedure Assign(const AValueList: THeaderValueList);
    procedure Parse(const AValue: string);
    function ToString: string; override;  //:1次列头信息完到一个字符串
    procedure Merge(const AValueList: THeaderValueList); overload;
    procedure Merge(const AValue: string); overload;
    property Count: Integer read GetCount;  //:头的构成数
    property Subject: string read FSubject write FSubject;
    property Names[AIndex: Integer]: string read GetNames;  //:分列 头的参数名
    property Values[AIndex: Integer]: string read GetValues;   //:分列 头的参数值
    property Value[const AName: string]: string read GetValue; default;
  end;

附相关文章: 

delphi XE Restful:RestClien案例RESTDebugger.dproj和RESTDemos.dproj的调用参数及格式设置:https://blog.csdn.net/pulledup/article/details/104242744

delphi Restful:客户端实现的四种方式及其比较

https://blog.csdn.net/pulledup/article/details/104132753

delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达

https://blog.csdn.net/pulledup/article/details/105408763

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

猜你喜欢

转载自blog.csdn.net/pulledup/article/details/105749158