private void GetMediaXmlCallback(IAsyncResult ar) { TransportClassMediaXml oTransportClassMediaXml = ar.AsyncState as TransportClassMediaXml; try { Dictionary<string, string> aMediaXmlMapHash; Dictionary<string, string> aMediaXmlMapFilename; ErrorTypes eError = oTransportClassMediaXml.m_oAsyncMediaXmlOperation.GetMediaXmlEnd(ar, out aMediaXmlMapHash, out aMediaXmlMapFilename); if (ErrorTypes.NoError == eError) { oTransportClassMediaXml.m_aMediaXmlMapHash = aMediaXmlMapHash; oTransportClassMediaXml.m_aMediaXmlMapFilename = aMediaXmlMapFilename; string[] aUrls; string sSupportedFormats = ""; if ("imgurl" == oTransportClassMediaXml.m_oInputCommand.c) { aUrls = new string[] { oTransportClassMediaXml.m_oInputCommand.data }; sSupportedFormats = ConfigurationSettings.AppSettings["limits.image.types.upload"] ?? "jpg"; } else { JavaScriptSerializer oJavaScriptSerializer = new JavaScriptSerializer(); aUrls = oJavaScriptSerializer.Deserialize<string[]>(oTransportClassMediaXml.m_oInputCommand.data); sSupportedFormats = ConfigurationSettings.AppSettings["limits.image.types.copy"] ?? "jpg"; } TransportClassImgUrl oTransportClassImgUrl = new TransportClassImgUrl(oTransportClassMediaXml, aUrls, sSupportedFormats, DownloadImages); DownloadImages(new AsyncOperationData(oTransportClassImgUrl)); } else WriteOutputCommand(oTransportClassMediaXml, new OutputCommand(ErrorTypes.Upload)); } catch { WriteOutputCommand(oTransportClassMediaXml, new OutputCommand(ErrorTypes.Upload)); } }
private void ProcessImage(byte[] aBuffer, TransportClassImgUrl oTransportClassImgUrl) { TransportClassMediaXml oTransportClassMediaXml = oTransportClassImgUrl.m_oTransportClassMediaXml; int nImageFormat = FormatChecker.GetFileFormat(aBuffer); if ((0 != (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE & nImageFormat) || FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG == nImageFormat) && -1 != oTransportClassImgUrl.m_sSupportedFormats.IndexOf(FileFormats.ToString(nImageFormat))) { if (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_GIF == nImageFormat || FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_ICO == nImageFormat) { byte[] aNewBuffer; if (Utils.ConvertGifIcoToPng(aBuffer, nImageFormat, out aNewBuffer)) { nImageFormat = FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_PNG; aBuffer = aNewBuffer; } } MemoryStream ms = new MemoryStream(aBuffer); string sHash = Utils.getMD5HexString(ms); string sExistFilename; if (oTransportClassMediaXml.m_aMediaXmlMapHash.TryGetValue(sHash, out sExistFilename)) { oTransportClassImgUrl.SetUrl(Constants.mc_sResourceServiceUrlRel + oTransportClassMediaXml.m_oInputCommand.id + "/media/" + sExistFilename); oTransportClassImgUrl.SetErrorAndCallback(ErrorTypes.NoError); } else { string ext = "." + FileFormats.ToString(nImageFormat); string sNewName; if(false == oTransportClassImgUrl.m_mapUrlToName.TryGetValue(oTransportClassImgUrl.m_sCurUrl, out sNewName)) { string sSearchName = "image"; List<int> aIndexes = new List<int>(); foreach (KeyValuePair<string, string> kvp in oTransportClassMediaXml.m_aMediaXmlMapFilename) { string sFilename = Path.GetFileNameWithoutExtension(kvp.Key); if (0 == sFilename.IndexOf(sSearchName)) { int nCurIndex; if (int.TryParse(sFilename.Substring(sSearchName.Length), out nCurIndex)) aIndexes.Add(nCurIndex); } } int nMaxIndex = -1; for (int i = 0, length = aIndexes.Count; i < length; ++i) { int nCurIndex = aIndexes[i]; if (nMaxIndex < nCurIndex) nMaxIndex = nCurIndex; } int nNewIndex = 1; if (nMaxIndex >= nNewIndex) nNewIndex = nMaxIndex + 1; sNewName = sSearchName + nNewIndex + ext; } if (FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG == nImageFormat) { string sCurUrl = oTransportClassImgUrl.m_sCurUrl; int nExtIndex = sCurUrl.LastIndexOf(".svg"); if (-1 != nExtIndex) { string sStart = sCurUrl.Substring(0, nExtIndex); string sEmfUrl = sStart + ".emf"; string sWmfUrl = sStart + ".wmf"; oTransportClassImgUrl.AddUrls(new string[] { sEmfUrl, sWmfUrl }); oTransportClassImgUrl.m_mapUrlToName[sEmfUrl] = Path.ChangeExtension(sNewName, ".emf"); oTransportClassImgUrl.m_mapUrlToName[sWmfUrl] = Path.ChangeExtension(sNewName, ".wmf"); } } oTransportClassMediaXml.m_aMediaXmlMapHash.Add(sHash, sNewName); oTransportClassMediaXml.m_aMediaXmlMapFilename.Add(sNewName, sHash); oTransportClassMediaXml.m_oStorage = new Storage(); oTransportClassMediaXml.m_oMemoryStream = ms; oTransportClassMediaXml.m_oParam = sNewName; ms.Position = 0; InputCommand cmd = oTransportClassMediaXml.m_oInputCommand; oTransportClassMediaXml.m_oStorage.WriteFileBegin(Path.Combine(cmd.id, @"media\" + sNewName), ms, WriteFileCallback, oTransportClassImgUrl); } } else oTransportClassImgUrl.SetErrorAndCallback(ErrorTypes.UploadExtension); }