代码比较简单,原先的代码比较拉杂,不说了,能用先
源代码在 \BlogEngine.Core\API\MetaWeblog\MetaWeblogHandler.cs 中
internal MWAMediaInfo NewMediaObject(string blogID, string userName, string password, MWAMediaObject mediaObject, HttpContext request)
{
ValidateRequest(userName, password);
MWAMediaInfo mediaInfo = new MWAMediaInfo();
string rootPath = BlogSettings.Instance.StorageLocation + "files/";
string serverPath = request.Server.MapPath(rootPath);
string saveFolder = serverPath;
string fileName = "Jea"+Guid.NewGuid().ToString() ;
FileInfo f = new FileInfo(mediaObject.name);
fileName+=f.Extension;
// Check/Create Folders & Fix fileName
if (mediaObject.name.LastIndexOf('/') > -1)
{
saveFolder += mediaObject.name.Substring(0, mediaObject.name.LastIndexOf('/'));
saveFolder = saveFolder.Replace('/', Path.DirectorySeparatorChar);
mediaObject.name = mediaObject.name.Substring(0, mediaObject.name.LastIndexOf('/'))+"/" + fileName;
}
else
{
if (saveFolder.EndsWith(Path.DirectorySeparatorChar.ToString()))
saveFolder = saveFolder.Substring(0, saveFolder.Length - 1);
mediaObject.name = fileName;
}
if (!Directory.Exists(saveFolder))
Directory.CreateDirectory(saveFolder);
saveFolder += Path.DirectorySeparatorChar;
// Save File
FileStream fs = new FileStream(saveFolder + fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(mediaObject.bits);
bw.Close();
// Set Url
string rootUrl = Utils.AbsoluteWebRoot.ToString();// request.Request.Url.ToString().Substring(0, request.Request.Url.ToString().IndexOf("metaweblog.axd"));
string mediaType = mediaObject.type;
if (mediaType.IndexOf('/') > -1)
mediaType = mediaType.Substring(0, mediaType.IndexOf('/'));
switch (mediaType)
{
case "image":
case "notsent": // If there wasn't a type, let's pretend it is an image. (Thanks Zoundry. This is for you.)
rootUrl += "image.axd?picture=";
break;
default:
rootUrl += "file.axd?file=";
break;
}
mediaInfo.url = rootUrl + mediaObject.name;
return mediaInfo;
}