コード例 #1
0
        public static bool extract_thumbnail(Guid?applicationId, DocFileInfo sourceFile, byte[] sourceContent,
                                             DocFileInfo destFile, int x, int y, int width, int height, int thumbnailWidth, int thumbnailHeight,
                                             ref string message, ref IconMeta meta)
        {
            try
            {
                if (sourceFile == null || sourceContent == null || sourceContent.Length == 0)
                {
                    return(false);
                }

                destFile.Extension = "jpg";

                if (!string.IsNullOrEmpty(sourceFile.Extension) && sourceFile.Extension != "jpg")
                {
                    using (MemoryStream stream = new MemoryStream(sourceContent))
                        using (MemoryStream newSt = new MemoryStream())
                            using (Image img = Bitmap.FromStream(stream))
                            {
                                img.Save(newSt, ImageFormat.Jpeg);
                                img.Dispose();

                                //sourceFile.delete(applicationId);

                                sourceFile.Extension = "jpg";
                                sourceContent        = newSt.ToArray();

                                //sourceFile.store(applicationId, newSt.ToArray());
                            }
                }

                Image retImage = null;
                if (extract_thumbnail(applicationId, sourceFile, sourceContent, destFile, x, y, width, height,
                                      thumbnailWidth, thumbnailHeight, ref retImage, ref message, ref meta))
                {
                    using (MemoryStream st = new MemoryStream())
                    {
                        retImage.Save(st, ImageFormat.Jpeg);
                        retImage.Dispose();

                        destFile.store(applicationId, st.ToArray());
                    }
                }

                return(true);
            }
            catch
            {
                message = "{\"ErrorText\":\"" + Messages.OperationFailed.ToString() + "\"}";
                return(false);
            }
        }
コード例 #2
0
        public static DocFileInfo decode_base64_file_content(Guid applicationId, Guid?ownerId,
                                                             string base64FileContent, FileOwnerTypes ownerType)
        {
            if (string.IsNullOrEmpty(base64FileContent))
            {
                return(null);
            }

            byte[] theData = null;

            try { theData = Convert.FromBase64String(base64FileContent); }
            catch { return(null); }

            int FIXED_HEADER = 16;

            DocFileInfo ret = new DocFileInfo()
            {
                FileID     = Guid.NewGuid(),
                OwnerID    = ownerId,
                OwnerType  = ownerType,
                FolderName = FolderNames.TemporaryFiles
            };

            try
            {
                using (MemoryStream ms = new MemoryStream(theData))
                {
                    using (BinaryReader theReader = new BinaryReader(ms))
                    {
                        //Position the reader to get the file size.
                        byte[] headerData = new byte[FIXED_HEADER];
                        headerData = theReader.ReadBytes(headerData.Length);

                        ret.Size = (int)theReader.ReadUInt32();
                        int fileNameLength = (int)theReader.ReadUInt32() * 2;

                        if (fileNameLength <= 0 || fileNameLength > 255)
                        {
                            throw new Exception("what the fuzz!!");
                        }

                        byte[] fileNameBytes = theReader.ReadBytes(fileNameLength);
                        //InfoPath uses UTF8 encoding.
                        Encoding enc          = Encoding.Unicode;
                        string   fullFileName = enc.GetString(fileNameBytes, 0, fileNameLength - 2);

                        int dotIndex = fullFileName.LastIndexOf(".");
                        if (dotIndex > 0 && dotIndex < (fullFileName.Length - 1))
                        {
                            ret.Extension = fullFileName.Substring(dotIndex + 1);
                        }

                        ret.FileName = string.IsNullOrEmpty(ret.Extension) ?
                                       fullFileName : fullFileName.Substring(0, dotIndex);

                        byte[] fileBytes = theReader.ReadBytes((int)ret.Size.Value);

                        if (!ret.store(applicationId, fileBytes))
                        {
                            return(null);
                        }
                    }
                }

                return(ret);
            }
            catch (Exception ex)
            {
                //maybe the file is a base64 image!!
                try
                {
                    Image img = PublicMethods.image_from_byte_array(theData);
                    if (img == null)
                    {
                        return(null);
                    }
                    byte[] imageBytes = PublicMethods.image_to_byte_array(img, System.Drawing.Imaging.ImageFormat.Jpeg);
                    if (imageBytes == null || imageBytes.Length == 0)
                    {
                        return(null);
                    }

                    ret.Size      = imageBytes.Length;
                    ret.FileName  = "img";
                    ret.Extension = "jpg";

                    if (!ret.store(applicationId, imageBytes))
                    {
                        return(null);
                    }

                    return(ret);
                }
                catch { return(null); }
            }
        }
コード例 #3
0
        public static bool make_thumbnail(Guid?applicationId, byte[] sourceContent, DocFileInfo destFile, ref byte[] destContent,
                                          int width, int height, int minWidth, int minHeight, ref string errorMessage,
                                          string forceExtension = null, bool stretch = false, bool dontStore = false)
        {
            if (!string.IsNullOrEmpty(forceExtension))
            {
                destFile.Extension = forceExtension;
            }

            if (sourceContent == null || sourceContent.Length == 0)
            {
                return(false);
            }

            Image retImage = null;

            try
            {
                using (MemoryStream stream = new MemoryStream(sourceContent))
                    using (Image img = Bitmap.FromStream(stream))
                    {
                        bool result = make_thumbnail(img, width, height, minWidth, minHeight,
                                                     ref retImage, ref errorMessage, stretch);

                        if (img != null)
                        {
                            img.Dispose();
                        }

                        if (!result)
                        {
                            if (retImage != null)
                            {
                                retImage.Dispose();
                            }
                            if (img != null)
                            {
                                retImage.Dispose();
                            }

                            return(false);
                        }

                        using (MemoryStream ms = new MemoryStream())
                        {
                            retImage.Save(ms, ImageFormat.Jpeg);
                            retImage.Dispose();
                            img.Dispose();

                            destContent = ms.ToArray();
                            if (!dontStore)
                            {
                                destFile.store(applicationId, destContent);
                            }
                        }

                        return(true);
                    }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }