public TransportClass3(TransportClass2 oTransportClass2, string sFilename, string sHash, string sPath, Storage oStorage) : base(oTransportClass2, oTransportClass2.m_oMediaXmlMapHash, oTransportClass2.m_oMediaXmlMapFilename, oTransportClass2.m_oAsyncContextReadOperation) { m_sFilename = sFilename; m_sHash = sHash; m_sPath = sPath; m_oStorage = oStorage; }
private void GetMediaXmlCallbackProcess(TransportClass1 oTransportClass1, Dictionary <string, string> aMediaXmlMapHash, Dictionary <string, string> aMediaXmlMapFilename) { AsyncContextReadOperation oAsyncContextReadOperation = new AsyncContextReadOperation(); TransportClass2 oTransportClass2 = new TransportClass2(oTransportClass1, aMediaXmlMapHash, aMediaXmlMapFilename, oAsyncContextReadOperation); HttpPostedFile oCurrentFile = (HttpPostedFile)oTransportClass1.m_oFiles[(string)oTransportClass1.m_oFilesEnumerator.Current]; oCurrentFile.InputStream.Position = 0; oAsyncContextReadOperation.ReadContextBegin(oCurrentFile.InputStream, ReadContextCallback, oTransportClass2); }
private void ImageUrlProcess(TransportClass2 oTransportClass2, string sUrl) { oTransportClass2.m_aUrls.Add(sUrl); if (oTransportClass2.m_oFilesEnumerator.MoveNext()) { GetMediaXmlCallbackProcess(oTransportClass2, oTransportClass2.m_oMediaXmlMapHash, oTransportClass2.m_oMediaXmlMapFilename); } else { oTransportClass2.m_oAsyncMediaXmlOperation.WriteMediaXmlBegin(oTransportClass2.m_sMediaXml, oTransportClass2.m_oMediaXmlMapHash, WriteMediaXmlCallback, oTransportClass2); } }
private void CheckStatus(TransportClass1 oTransportClass1, TaskResultData oTaskResultData) { switch (oTaskResultData.eStatus) { case FileStatus.Ok: string sFilename = HttpUtility.UrlEncode("output." + FileFormats.ToString(oTransportClass1.m_oInputParams.m_nOutputtype)); string sPath = HttpUtility.UrlEncode(Path.GetFileNameWithoutExtension(oTransportClass1.m_oInputParams.m_sKey) + "/output." + FileFormats.ToString(oTransportClass1.m_oInputParams.m_nOutputtype)); string sDeletePath = HttpUtility.UrlEncode(Path.GetFileNameWithoutExtension(oTransportClass1.m_oInputParams.m_sKey)); string sSiteUrl = UrlBuilder.UrlWithoutPath(oTransportClass1.m_oHttpContext.Request); string strFileUrl = sSiteUrl + Constants.mc_sResourceServiceUrlRel + sPath + "&nocache=true" + "&deletepath=" + sDeletePath + "&filename=" + sFilename; WriteOutputCommand(oTransportClass1, new OutputCommand(strFileUrl, "100", true, ErrorTypes.NoError)); break; case FileStatus.WaitQueue: if (oTransportClass1.m_oInputParams.m_bAsyncConvert) { WriteOutputCommand(oTransportClass1, new OutputCommand("", "0", false, ErrorTypes.NoError)); } else { WaitEnd(oTransportClass1); } break; case FileStatus.Convert: if (oTransportClass1.m_oInputParams.m_bAsyncConvert) { WriteOutputCommand(oTransportClass1, new OutputCommand("", oTaskResultData.nStatusInfo.ToString(), false, ErrorTypes.NoError)); } else { WaitEnd(oTransportClass1); } break; case FileStatus.Err: case FileStatus.ErrToReload: AsyncClearCacheOperation oAsyncClearCacheOperation = new AsyncClearCacheOperation(); TransportClass2 oTransportClass2 = new TransportClass2(oTransportClass1, oAsyncClearCacheOperation, (ErrorTypes)oTaskResultData.nStatusInfo); oAsyncClearCacheOperation.ClearCacheBegin(oTransportClass1.m_oInputParams.m_sKey, ClearCacheCallback, oTransportClass2); break; default: WriteOutputCommand(oTransportClass1, new OutputCommand(null, null, null, ErrorTypes.Unknown)); break; } }
private void ClearCacheCallback(IAsyncResult ar) { TransportClass2 oTransportClass2 = ar.AsyncState as TransportClass2; try { ErrorTypes eError = oTransportClass2.m_oAsyncClearCacheOperation.ClearCacheEnd(ar); if (ErrorTypes.NoError == eError) { WriteOutputCommand(oTransportClass2, new OutputCommand(null, null, null, oTransportClass2.m_eError)); } else { WriteOutputCommand(oTransportClass2, new OutputCommand(null, null, null, eError)); } } catch { WriteOutputCommand(oTransportClass2, new OutputCommand(null, null, null, ErrorTypes.Unknown)); } }
private void ReadContextCallback(IAsyncResult ar) { TransportClass2 oTransportClass2 = ar.AsyncState as TransportClass2; try { ErrorTypes eError = oTransportClass2.m_oAsyncContextReadOperation.ReadContextEnd(ar); if (ErrorTypes.NoError == eError) { HttpPostedFile oCurrentFile = ((HttpPostedFile)oTransportClass2.m_oFiles[(string)oTransportClass2.m_oFilesEnumerator.Current]); oCurrentFile.InputStream.Position = 0; Stream oImageStream = oCurrentFile.InputStream; byte[] aBuffer = oTransportClass2.m_oAsyncContextReadOperation.m_aOutput.ToArray(); int nImageFormat = FormatChecker.GetFileFormat(aBuffer); string sSupportedFormats = ConfigurationSettings.AppSettings["limits.image.types.upload"] ?? "jpg"; if (0 != (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE & nImageFormat) && -1 != 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; oImageStream = new MemoryStream(aBuffer); } } string sImageHash = null; using (MemoryStream ms = new MemoryStream(aBuffer)) sImageHash = Utils.getMD5HexString(ms); string sFileName; if (oTransportClass2.m_oMediaXmlMapHash.TryGetValue(sImageHash, out sFileName)) { ImageUrlProcess(oTransportClass2, Constants.mc_sResourceServiceUrlRel + Path.Combine(oTransportClass2.m_sKey, @"media\" + sFileName).Replace('\\', '/')); } else { string sSearchName = "image"; List <int> aIndexes = new List <int>(); foreach (KeyValuePair <string, string> kvp in oTransportClass2.m_oMediaXmlMapFilename) { 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; } string sNewName = sSearchName + nNewIndex + "." + FileFormats.ToString(nImageFormat); string sNewPath = Path.Combine(oTransportClass2.m_sKey, @"media\" + sNewName).Replace('\\', '/'); Storage oStorage = new Storage(); TransportClass3 oTransportClass3 = new TransportClass3(oTransportClass2, sNewName, sImageHash, sNewPath, oStorage); oTransportClass3.m_oStorage.WriteFileBegin(sNewPath, oImageStream, WriteUploadedFileCallback, oTransportClass3); } } else { WriteToResponse(oTransportClass2, ErrorTypes.UploadExtension, null, oTransportClass2.m_aInputParams); } } else { WriteToResponse(oTransportClass2, eError, null, oTransportClass2.m_aInputParams); } } catch (Exception e) { _log.Error("Exeption: ", e); WriteToResponse(oTransportClass2, ErrorTypes.Upload, null, oTransportClass2.m_aInputParams); } }
private void ImageUrlProcess(TransportClass2 oTransportClass2, string sUrl) { oTransportClass2.m_aUrls.Add(sUrl); if (oTransportClass2.m_oFilesEnumerator.MoveNext()) GetMediaXmlCallbackProcess(oTransportClass2, oTransportClass2.m_oMediaXmlMapHash, oTransportClass2.m_oMediaXmlMapFilename); else oTransportClass2.m_oAsyncMediaXmlOperation.WriteMediaXmlBegin(oTransportClass2.m_sMediaXml, oTransportClass2.m_oMediaXmlMapHash, WriteMediaXmlCallback, oTransportClass2); }
private void GetMediaXmlCallbackProcess(TransportClass1 oTransportClass1, Dictionary<string, string> aMediaXmlMapHash, Dictionary<string, string> aMediaXmlMapFilename) { AsyncContextReadOperation oAsyncContextReadOperation = new AsyncContextReadOperation(); TransportClass2 oTransportClass2 = new TransportClass2(oTransportClass1, aMediaXmlMapHash, aMediaXmlMapFilename, oAsyncContextReadOperation); HttpPostedFile oCurrentFile = (HttpPostedFile)oTransportClass1.m_oFiles[(string)oTransportClass1.m_oFilesEnumerator.Current]; oCurrentFile.InputStream.Position = 0; oAsyncContextReadOperation.ReadContextBegin(oCurrentFile.InputStream, ReadContextCallback, oTransportClass2); }
private void CheckStatus(TransportClass1 oTransportClass1, TaskResultData oTaskResultData) { switch (oTaskResultData.eStatus) { case FileStatus.Ok: string sFilename = HttpUtility.UrlEncode("output." + FileFormats.ToString(oTransportClass1.m_oInputParams.m_nOutputtype)); string sPath = HttpUtility.UrlEncode(Path.GetFileNameWithoutExtension(oTransportClass1.m_oInputParams.m_sKey) + "/output." + FileFormats.ToString(oTransportClass1.m_oInputParams.m_nOutputtype)); string sDeletePath = HttpUtility.UrlEncode(Path.GetFileNameWithoutExtension(oTransportClass1.m_oInputParams.m_sKey)); string sSiteUrl = UrlBuilder.UrlWithoutPath(oTransportClass1.m_oHttpContext.Request); string strFileUrl = sSiteUrl + Constants.mc_sResourceServiceUrlRel + sPath + "&nocache=true" +"&deletepath=" + sDeletePath + "&filename=" + sFilename; WriteOutputCommand(oTransportClass1, new OutputCommand(strFileUrl, "100", true, ErrorTypes.NoError)); break; case FileStatus.WaitQueue: if (oTransportClass1.m_oInputParams.m_bAsyncConvert) WriteOutputCommand(oTransportClass1, new OutputCommand("", "0", false, ErrorTypes.NoError)); else WaitEnd(oTransportClass1); break; case FileStatus.Convert: if (oTransportClass1.m_oInputParams.m_bAsyncConvert) WriteOutputCommand(oTransportClass1, new OutputCommand("", oTaskResultData.nStatusInfo.ToString(), false, ErrorTypes.NoError)); else WaitEnd(oTransportClass1); break; case FileStatus.Err: case FileStatus.ErrToReload: AsyncClearCacheOperation oAsyncClearCacheOperation = new AsyncClearCacheOperation(); TransportClass2 oTransportClass2 = new TransportClass2(oTransportClass1, oAsyncClearCacheOperation, (ErrorTypes)oTaskResultData.nStatusInfo); oAsyncClearCacheOperation.ClearCacheBegin(oTransportClass1.m_oInputParams.m_sKey, ClearCacheCallback, oTransportClass2); break; default: WriteOutputCommand(oTransportClass1, new OutputCommand(null, null, null, ErrorTypes.Unknown)); break; } }