//实现文件上传 public MediaObjectUrl newMediaObject(string blogid, string username, string password, MediaObject mediaObject) { int uid = ValidateUser(username, password); if (uid < 1) { throw new XmlRpcFaultException(0, "用户不存在"); } string[] currentdate = DateTime.Now.ToString("yyyy-MM-dd").Split('-'); string fileDatePath = currentdate[0] + "/" + currentdate[1] + "/" + currentdate[2] + "/"; string sSavePath = Utils.GetMapPath(BaseConfigs.GetForumPath + "space/upload/" + ((FTPs.GetSpaceAttachInfo.Allowupload == 1 && FTPs.GetSpaceAttachInfo.Reservelocalattach == 0) ? "temp/" : fileDatePath)); if (!Directory.Exists(sSavePath)) { Utils.CreateDir(sSavePath); } Random random = new Random(unchecked ((int)DateTime.Now.Ticks)); string sFilename = (Environment.TickCount & int.MaxValue).ToString() + random.Next(1000, 9999).ToString() + System.IO.Path.GetExtension(mediaObject.name).ToLower(); //判断sFilename的文件名称是否已存在于服务器上. 如存在, 则添加文件递增标识 int file_append = 0; while (File.Exists(sSavePath + sFilename)) { file_append++; sFilename = Path.GetFileNameWithoutExtension(mediaObject.name) + file_append.ToString() + Path.GetExtension(mediaObject.name).ToLower(); } string fileExtName = Path.GetExtension(mediaObject.name).ToLower(); fileExtName = fileExtName != "" ? fileExtName: ".invalidExtName"; int groupid = Users.GetShortUserInfo(uid).Groupid; string attachextensions = GetAllowedExtensions(groupid); if ((attachextensions == null) || (attachextensions.ToLower().IndexOf(fileExtName.Remove(0, 1)) >= 0)) { //上传图片文件 if ((fileExtName == ".jpg") || (fileExtName == ".gif") || (fileExtName == ".png") || (fileExtName == ".jpeg")) { try { int maxspacesize = UserGroups.GetUserGroupInfo(groupid).Maxspaceattachsize; int currentspaceattachmentsize = DbProvider.GetInstance().GetSpaceAttachmentSizeByUserid(uid); if ((maxspacesize - currentspaceattachmentsize - mediaObject.bits.Length) <= 0) //个人空间的存储空间不足 { throw new XmlRpcFaultException(101, "存储空间不足, 上传失败!"); } else { FileStream newFile = new FileStream(sSavePath + sFilename, FileMode.Create); newFile.Write(mediaObject.bits, 0, mediaObject.bits.Length); newFile.Close(); } string filename = ""; filename = GetAttachRootPath(fileDatePath); //当支持FTP上传附件时,使用FTP上传远程附件,并在上传完成之后删除本地tempfilename文件 if (FTPs.GetSpaceAttachInfo.Allowupload == 1) { FTPs ftps = new FTPs(); ftps.UpLoadFile(filename.Replace(FTPs.GetSpaceAttachInfo.Remoteurl, ""), sSavePath + sFilename, FTPs.FTPUploadEnum.SpaceAttach); } filename = filename + sFilename; //保存文件信息 SaveSpaceAttachment(mediaObject, uid, filename); string permalink = filename; if (!(FTPs.GetSpaceAttachInfo.Allowupload == 1)) { permalink = "http://" + DNTRequest.GetCurrentFullHost() + filename; } MediaObjectUrl mediaObjectUrl = new MediaObjectUrl(); mediaObjectUrl.url = permalink; return(mediaObjectUrl); } catch { File.Delete(sSavePath + sFilename); throw new XmlRpcFaultException(102, "上传文件发生异常"); } } else //其它类型文件 { int maxspacesize = UserGroups.GetUserGroupInfo(groupid).Maxspaceattachsize; int currentspaceattachmentsize = DbProvider.GetInstance().GetSpaceAttachmentSizeByUserid(uid); if ((maxspacesize - currentspaceattachmentsize - mediaObject.bits.Length) <= 0) //个人空间的存储空间不足 { throw new XmlRpcFaultException(101, "存储空间不足, 上传失败!"); } else { try { FileStream newFile = new FileStream(sSavePath + sFilename, FileMode.Create); newFile.Write(mediaObject.bits, 0, mediaObject.bits.Length); newFile.Close(); string filename = ""; filename = GetAttachRootPath(fileDatePath); filename = filename + sFilename; //保存文件信息 SaveSpaceAttachment(mediaObject, uid, filename); //当支持FTP上传附件时,使用FTP上传远程附件,并在上传完成之后删除本地tempfilename文件 if (FTPs.GetSpaceAttachInfo.Allowupload == 1) { FTPs ftps = new FTPs(); ftps.UpLoadFile(GetAttachRootPath(fileDatePath).Replace(FTPs.GetSpaceAttachInfo.Remoteurl, ""), sSavePath + sFilename, FTPs.FTPUploadEnum.SpaceAttach); } string permalink = filename; if (!(FTPs.GetSpaceAttachInfo.Allowupload == 1)) { permalink = "http://" + DNTRequest.GetCurrentFullHost() + filename; } MediaObjectUrl mediaObjectUrl = new MediaObjectUrl(); mediaObjectUrl.url = permalink; return(mediaObjectUrl); } catch { File.Delete(sSavePath + sFilename); throw new XmlRpcFaultException(102, "上传文件发生异常"); } } } } return(new MediaObjectUrl()); }
//实现文件上传 public MediaObjectUrl newMediaObject(string blogid, string username, string password, MediaObject mediaObject) { int uid = ValidateUser(username, password); if (uid < 1) throw new XmlRpcFaultException(0, "用户不存在"); string[] currentdate = DateTime.Now.ToString("yyyy-MM-dd").Split('-'); string fileDatePath = currentdate[0] + "/" + currentdate[1] + "/" + currentdate[2] + "/"; string sSavePath = Utils.GetMapPath(BaseConfigs.GetForumPath + "space/upload/" + ((FTPs.GetSpaceAttachInfo.Allowupload == 1 && FTPs.GetSpaceAttachInfo.Reservelocalattach == 0) ? "temp/" : fileDatePath)); if (!Directory.Exists(sSavePath)) { Utils.CreateDir(sSavePath); } Random random = new Random(unchecked((int)DateTime.Now.Ticks)); string sFilename = (Environment.TickCount & int.MaxValue).ToString() + random.Next(1000, 9999).ToString() + System.IO.Path.GetExtension(mediaObject.name).ToLower(); //判断sFilename的文件名称是否已存在于服务器上. 如存在, 则添加文件递增标识 int file_append = 0; while (File.Exists(sSavePath + sFilename)) { file_append++; sFilename = Path.GetFileNameWithoutExtension(mediaObject.name) + file_append.ToString() + Path.GetExtension(mediaObject.name).ToLower(); } string fileExtName = Path.GetExtension(mediaObject.name).ToLower(); fileExtName = fileExtName !="" ? fileExtName: ".invalidExtName"; int groupid = Users.GetShortUserInfo(uid).Groupid; string attachextensions = GetAllowedExtensions(groupid); if ((attachextensions == null) || (attachextensions.ToLower().IndexOf(fileExtName.Remove(0, 1)) >= 0)) { //上传图片文件 if ((fileExtName == ".jpg") || (fileExtName == ".gif") || (fileExtName == ".png") || (fileExtName == ".jpeg")) { try { int maxspacesize = UserGroups.GetUserGroupInfo(groupid).Maxspaceattachsize; int currentspaceattachmentsize = DbProvider.GetInstance().GetSpaceAttachmentSizeByUserid(uid); if ((maxspacesize - currentspaceattachmentsize - mediaObject.bits.Length) <= 0) //个人空间的存储空间不足 { throw new XmlRpcFaultException(101, "存储空间不足, 上传失败!"); } else { FileStream newFile = new FileStream(sSavePath + sFilename, FileMode.Create); newFile.Write(mediaObject.bits, 0, mediaObject.bits.Length); newFile.Close(); } string filename = ""; filename = GetAttachRootPath(fileDatePath); //当支持FTP上传附件时,使用FTP上传远程附件,并在上传完成之后删除本地tempfilename文件 if (FTPs.GetSpaceAttachInfo.Allowupload == 1) { FTPs ftps = new FTPs(); ftps.UpLoadFile(filename.Replace(FTPs.GetSpaceAttachInfo.Remoteurl, ""), sSavePath + sFilename, FTPs.FTPUploadEnum.SpaceAttach); } filename = filename + sFilename; //保存文件信息 SaveSpaceAttachment(mediaObject, uid, filename); string permalink = filename; if (!(FTPs.GetSpaceAttachInfo.Allowupload == 1)) { permalink = "http://" + DNTRequest.GetCurrentFullHost() + filename; } MediaObjectUrl mediaObjectUrl = new MediaObjectUrl(); mediaObjectUrl.url = permalink; return mediaObjectUrl; } catch { File.Delete(sSavePath + sFilename); throw new XmlRpcFaultException(102, "上传文件发生异常"); } } else //其它类型文件 { int maxspacesize = UserGroups.GetUserGroupInfo(groupid).Maxspaceattachsize; int currentspaceattachmentsize = DbProvider.GetInstance().GetSpaceAttachmentSizeByUserid(uid); if ((maxspacesize - currentspaceattachmentsize - mediaObject.bits.Length) <= 0) //个人空间的存储空间不足 { throw new XmlRpcFaultException(101, "存储空间不足, 上传失败!"); } else { try { FileStream newFile = new FileStream(sSavePath + sFilename, FileMode.Create); newFile.Write(mediaObject.bits, 0, mediaObject.bits.Length); newFile.Close(); string filename = ""; filename = GetAttachRootPath(fileDatePath); filename = filename + sFilename; //保存文件信息 SaveSpaceAttachment(mediaObject, uid, filename); //当支持FTP上传附件时,使用FTP上传远程附件,并在上传完成之后删除本地tempfilename文件 if (FTPs.GetSpaceAttachInfo.Allowupload == 1) { FTPs ftps = new FTPs(); ftps.UpLoadFile(GetAttachRootPath(fileDatePath).Replace(FTPs.GetSpaceAttachInfo.Remoteurl, ""), sSavePath + sFilename, FTPs.FTPUploadEnum.SpaceAttach); } string permalink = filename; if (!(FTPs.GetSpaceAttachInfo.Allowupload == 1)) { permalink = "http://" + DNTRequest.GetCurrentFullHost() + filename; } MediaObjectUrl mediaObjectUrl = new MediaObjectUrl(); mediaObjectUrl.url = permalink; return mediaObjectUrl; } catch { File.Delete(sSavePath + sFilename); throw new XmlRpcFaultException(102, "上传文件发生异常"); } } } } return new MediaObjectUrl(); }