服务端代码
注意:“我记录网站综合系统”中已经全部实现了如下功能,请勿在“我记录网站综合系统”中额外添加。
1)设置上传图片的网址。一般在 IMvcFilter 过滤器的 Begin_InitContext 事件中设置此网址
其实不一定要使用 IMvcFilter,只要在使用editor( "", "", "" )方法之前设置ctx.SetItem( "editorUploadUrl", "")即可,这里使用 IMvcFilter 是可以对全站生效,避免每个action中逐个编码。
public class ContextInit : IMvcFilter {
public void Process( wojilu.Web.Mvc.MvcEventPublisher publisher ) {
publisher.Begin_InitContext +=
new EventHandler<wojilu.Web.Mvc.MvcEventArgs>( publisher_Begin_InitContext );
}
void publisher_Begin_InitContext( object sender, wojilu.Web.Mvc.MvcEventArgs e ) {
MvcContext ctx = e.ctx;
User user = getUserById( ctx.web.UserId() ); // 此处获取用户信息,请自己实现 getUserById 方法
// 如果用户已经登录
if (user.IsLogin) {
Link lnk = new Link( ctx );
// "editorUploadUrl"和"editorMyPicsUrl"是框架内置的两个网址名称
// 设置接收图片上传的服务端网址
ctx.SetItem( "editorUploadUrl", lnk.To( user, "Users/Admin/UserUpload", "UploadForm", -1, -1 ) );
// 用户图片浏览(可选)
ctx.SetItem( "editorMyPicsUrl", lnk.To( user, "Users/Admin/UserUpload", "MyPics", -1, -1 ) );
}
}
}
2)完成图片上传的action
下面截取了“我记录网站综合系统”的部分代码,它实现了两种上传模式,1)传统上传,2)flash带进度条上传
更多请参考“我记录网站综合系统”中的实现,
服务端源码在 wojilu.Controller/Users/Admin/UserUploadController.cs
视图界面源码在 wojilu.Web/framework/views/Users/Admin/UserUpload/ 目录下(包括两种上传界面)。
public void UploadForm() {
Boolean isFlash = ("normal".Equals( ctx.Get( "type" ) ) == false);
if (isFlash) { // flash上传界面
view( "FlashUpload" );
set( "uploadLink", to( SaveFlash ) );
set( "authCookieName", ctx.web.CookieAuthName() );
set( "authCookieValue", ctx.web.CookieAuthValue() );
String editorName = ctx.Get( "editor" );
set( "editorName", editorName );
set( "normalLink", to( UploadForm ) + "?type=normal&editor=" + editorName );
set( "jsPath", sys.Path.DiskJs );
}
else {
target( SavePic );
String editorName = ctx.Get( "editor" );
set( "editorName", editorName );
}
}
public void SaveFlash() {
PhotoPost post = savePicPrivate();
if (ctx.HasErrors) {
echoError();
return;
}
// 在编辑器中只允许使用中略图,原始图片可能很大,影响页面效果
set( "picUrl", post.ImgMediumUrl );
set( "oPicUrl", post.ImgUrl );
String json = "{PicUrl:'" + post.ImgMediumUrl + "', OpicUrl:'" + post.ImgUrl + "'}";
echoText( json );
}
public void SavePic() {
String editorName = ctx.Post( "editor" );
set( "editorName", editorName );
String uploadUrl = to( UploadForm ) + "?editor=" + editorName;
set( "uploadUrl", uploadUrl );
PhotoPost post = savePicPrivate();
if (ctx.HasErrors) {
echoRedirect( errors.ErrorsHtml, uploadUrl );
return;
}
// 在编辑器中只允许使用中略图,原始图片可能很大,影响页面效果
set( "picUrl", post.ImgMediumUrl );
set( "oPicUrl", post.ImgUrl );
}
private PhotoPost savePicPrivate() {
HttpFile postedFile = ctx.GetFileSingle();
Result result = Uploader.SaveImg( postedFile ); // 保存上传的图片(包括缩略图)
if (result.HasErrors) {
errors.Join( result );
return null;
}
PhotoPost post = new PhotoPost();
post.DataUrl = result.Info.ToString(); // 上传的图片路径
post.Title = strUtil.CutString( Path.GetFileNameWithoutExtension( postedFile.FileName ), 20 ); // 图片名称
post.Ip = ctx.Ip;
// ... 其他代码
return post;
}