/// <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); } } } } }
/// <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 } } } }