/// <summary>
 /// 创建缩略图。
 /// </summary>
 /// <param name="store"></param>
 /// <param name="ls"></param>
 /// <param name="wf"></param>
 /// <param name="w"></param>
 /// <param name="h"></param>
 /// <returns></returns>
 public static Image CreateThumbnail(LocalStudentWorkStore store, LocalStudent ls, LocalStudentWorkFile wf, int w, int h)
 {
     if (store != null && ls != null && wf != null)
     {
         try
         {
             string root = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + "\\SFIT_TeaClient\\" + store.TeacherID + "_" + store.CatalogID;
             if (!Directory.Exists(root)) Directory.CreateDirectory(root);
             string path = Path.GetFullPath(string.Format("{0}\\{1}_{2}_{3}x{4}.jpg", root, ls.StudentID, wf.FileID, w, h));
             if (File.Exists(path)) return Image.FromFile(path);
             if (DefaultThumbnailFormat.IsExistThumbnailFormat(wf.FileExt))
             {
                 string source = ls.Work.StudentWorkFilePath(store, ls, wf);
                 if (File.Exists(source))
                 {
                     Image img = ImageHelper.MakeThumbnail(Image.FromFile(source), w, h);
                     if (img != null)
                     {
                         img.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
                         return img;
                     }
                 }
             }
         }
         catch (Exception e)
         {
             UtilTools.OnExceptionRecord(e, typeof(ThumbnailsHelpers));
         }
     }
     return null;
 }
 /// <summary>
 /// 获取学生作品路径。
 /// </summary>
 /// <param name="store"></param>
 /// <param name="ls"></param>
 /// <param name="workFile"></param>
 /// <returns></returns>
 public string StudentWorkFilePath(LocalStudentWorkStore store, LocalStudent ls, LocalStudentWorkFile workFile)
 {
     if (store != null && ls != null && workFile != null)
     {
         string rootDir = store.RootDir();
         if (!string.IsNullOrEmpty(rootDir) && Directory.Exists(rootDir))
         {
             string dir = Path.GetFullPath(string.Format("{0}/{1}", rootDir, ls.StudentID));
             if (!Directory.Exists(dir))
             {
                 Directory.CreateDirectory(dir);
             }
             return Path.GetFullPath(string.Format("{0}/{1}{2}", dir, workFile.FileID, workFile.FileExt));
         }
     }
     return null;
 }
        /// <summary>
        /// 保存数据。
        /// </summary>
        /// <param name="store">学生作品存储。</param>
        /// <param name="ls">学生信息。</param>
        /// <param name="files">文件数据。</param>
        public void SaveFiles(LocalStudentWorkStore store, LocalStudent ls, StudentWorkFiles files)
        {
            if (store != null && ls != null && files != null && files.Count > 0)
            {
                if (this.WorkFiles == null)
                    this.WorkFiles = new LocalStudentWorkFiles();
                else
                    this.WorkFiles.Clear();
                for (int i = 0; i < files.Count; i++)
                {
                    StudentWorkFile swf = files[i];
                    if (swf.Data != null && swf.Data.Length > 0)
                    {
                        LocalStudentWorkFile file = new LocalStudentWorkFile();
                        file.FileID = swf.FileID;
                        file.FileName = Path.GetFileNameWithoutExtension(swf.FileName);
                        file.FileExt = swf.FileExt;
                        file.Size = swf.Size > 0 ? swf.Size : swf.Data.Length;

                        if (this.FileExt == null)
                            this.FileExt = file.FileExt;
                        else if (this.FileExt.IndexOf(file.FileExt) == -1)
                            this.FileExt += string.Format("|{0}", file.FileExt);

                        string path = this.StudentWorkFilePath(store, ls, file);
                        if (!string.IsNullOrEmpty(path))
                        {
                            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                            {
                                fs.Write(swf.Data, 0, swf.Data.Length);
                            }
                            this.WorkFiles.Add(file);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// 恢复作业关联。
        /// </summary>
        public static void RecoveryWorkAssociation(ref LocalStudentWorkStore store, string studentId)
        {
            if (store == null || store.Students == null || store.Students.Count == 0 || string.IsNullOrEmpty(studentId)) return;
            LocalStudent ls = store.Students[studentId];
            if (ls == null || ls.HasWork()) return;
            string dir = Path.GetFullPath(string.Format("{0}/{1}", store.RootDir(), ls.StudentID));
            if (!Directory.Exists(dir)) return;
            FileInfo[] files = new DirectoryInfo(dir).GetFiles();
            if (files == null || files.Length == 0) return;

            ls.Work = new LocalStudentWork();
            ls.Work.WorkID = Guid.NewGuid().ToString().Replace("-", "");
            ls.Work.WorkName = store.CatalogName;
            ls.Work.UploadIP = "127.0.0.1";
            ls.Work.Type = EnumWorkType.Public;
            ls.Work.Time = DateTime.Now;
            ls.Work.Status = EnumWorkStatus.Recive | EnumWorkStatus.Submit;
            ls.Work.Description = new CDATA();
            ls.Work.WorkFiles = new LocalStudentWorkFiles();

            for (int i = 0; i < files.Length; i++)
            {
                if (files[i].Exists)
                {
                    LocalStudentWorkFile file = new LocalStudentWorkFile();
                    file.FileID = Path.GetFileNameWithoutExtension(files[i].Name);
                    file.FileName = ls.Work.WorkName + "_" + (i + 1);
                    file.FileExt = files[i].Extension;
                    file.Size = files[i].Length;

                    if (ls.Work.FileExt == null)
                        ls.Work.FileExt = file.FileExt;
                    else if (ls.Work.FileExt.IndexOf(file.FileExt) == -1)
                        ls.Work.FileExt += string.Format("|{0}", file.FileExt);

                    ls.Work.WorkFiles.Add(file);
                }
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="zipWorkPath"></param>
 /// <param name="store"></param>
 /// <param name="ls"></param>
 /// <param name="lsw"></param>
 /// <param name="handler"></param>
 private void ImportWorkFiles(string zipWorkPath, LocalStudentWorkStore store, LocalStudent ls, LocalStudentWork lsw, RaiseChangedHandler handler)
 {
     if (this.zipFile != null && !string.IsNullOrEmpty(zipWorkPath))
     {
         Stream stream = stream = ZipUtils.ZipFileData(this.zipFile, zipWorkPath);
         if (stream != null)
         {
             if (string.Equals(Path.GetExtension(zipWorkPath), ".zip", StringComparison.InvariantCultureIgnoreCase))
             {
                 #region 压缩文件解压。
                 using (ZipInputStream zipStream = new ZipInputStream(stream))
                 {
                     if (zipStream == null)
                     {
                         return;
                     }
                     ZipEntry entry = null;
                     while ((entry = zipStream.GetNextEntry()) != null)
                     {
                         if (entry != null && entry.IsFile && !string.IsNullOrEmpty(entry.Name))
                         {
                             LocalStudentWorkFile lswf = new LocalStudentWorkFile();
                             lswf.FileID = string.Format("{0}", Guid.NewGuid()).Replace("-", string.Empty);
                             lswf.FileExt = Path.GetExtension(entry.Name);
                             lswf.FileName = Path.GetFileNameWithoutExtension(entry.Name);
                             if (string.IsNullOrEmpty(lsw.FileExt))
                             {
                                 lsw.FileExt = lswf.FileExt;
                             }
                             else if (lsw.FileExt.IndexOf(lswf.FileExt) == -1)
                             {
                                 lsw.FileExt += "|" + lswf.FileExt;
                             }
                             lswf.Size = entry.Size;
                             lsw.WorkFiles.Add(lswf);
                             this.RaiseChanged(handler, string.Format("导入作品{0}{1}...", lswf.FileName, lswf.FileExt));
                             using (FileStream fs = new FileStream(lsw.StudentWorkFilePath(store, ls, lswf), FileMode.Create, FileAccess.Write))
                             {
                                 byte[] buf = new byte[512];
                                 int len = 0;
                                 while ((len = zipStream.Read(buf, 0, buf.Length)) > 0)
                                 {
                                     fs.Write(buf, 0, len);
                                 }
                             }
                         }
                     }
                 }
                 #endregion
             }
             else
             {
                 #region 导入单独文件。
                 LocalStudentWorkFile lswf = new LocalStudentWorkFile();
                 lswf.FileID = string.Format("{0}", Guid.NewGuid()).Replace("-", string.Empty);
                 lswf.FileName = lsw.WorkName;
                 lswf.FileExt = Path.GetExtension(zipWorkPath);
                 if (string.IsNullOrEmpty(lsw.FileExt))
                 {
                     lsw.FileExt = lswf.FileExt;
                 }
                 else if (lsw.FileExt.IndexOf(lswf.FileExt) == -1)
                 {
                     lsw.FileExt += "|" + lswf.FileExt;
                 }
                 lswf.Size = stream.Length;
                 lsw.WorkFiles.Add(lswf);
                 this.RaiseChanged(handler, string.Format("导入作品{0}{1}...", lswf.FileName, lswf.FileExt));
                 using (FileStream fs = new FileStream(lsw.StudentWorkFilePath(store, ls, lswf), FileMode.Create, FileAccess.Write))
                 {
                     byte[] buf = new byte[512];
                     StreamUtils.Copy(stream, fs, buf);
                 }
                 #endregion
             }
         }
     }
 }