天天看点

asp.net使用百度的webuploader批量上传图片

各位想必是在百度下载webuploader后,看官方的demo并没有看明白才搜到这里来的吧。

我也是,我将搜索的结果做了整理,大家互相学习进步。

下载下来的是一个php的写的,asp.net的服务器端得自己重新写一个服务,将下载的代码进行如下修改(这里使用的是demo中的examples/image-upload/upload.js):

找到154行,将图片上传地址修改为.net的一般处理程序的请求地址

server: '../../server/fileupload.php',
           

修改为您的一般处理程序地址

server: '../../server/fileupload.ashx',
           

好了,到这里我们将upload.js修改完成了,如果你要使用到自己的项目中,还需要修改

首先,找到109行的代码

var swf = './expressInstall.swf';
           

修改为您的flash地址:

var swf = '../image/expressInstall.swf';
           

其次,找到151行,在实例化的时候修改用于上传flash的地址:

swf: '../../dist/Uploader.swf',
           

修改为您的

swf: '../image/Uploader.swf',
           

最后,如果你有自己的预览的服务器,还需要修改代码地址(我没有写不影响文件上传)

修改为您的一般处理程序的预览地址

下面就是写了处理程序了,在项目中server文件夹添加以下两个文件fileupload.ashx和preview.ashx。

下面主要介绍fileupload.ashx的实现方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;

namespace FileUpload.server
{
    /// <summary>
    /// Summary description for fileupload
    /// </summary>
    public class fileupload : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //指定字符集
            context.Response.ContentEncoding = Encoding.UTF8;
            if (context.Request["REQUEST_METHOD"] == "OPTIONS")
            {
                context.Response.End();
            }
            SaveFile();
        }
        /// <summary>
        /// 文件保存操作
        /// </summary>
        /// <param name="basePath"></param>
        private void SaveFile(string basePath = "~/Upload/Images/")
        {
            var name = string.Empty;
            basePath = (basePath.IndexOf("~") > -1) ? System.Web.HttpContext.Current.Server.MapPath(basePath) : basePath;
            HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            //如果目录不存在,则创建目录
            if (!Directory.Exists(basePath))
            {
                Directory.CreateDirectory(basePath);
            }

            var suffix = files[0].ContentType.Split('/');
            //获取文件格式
            var _suffix = suffix[1].Equals("jpeg",StringComparison.CurrentCultureIgnoreCase) ? "" : suffix[1];
            var _temp = System.Web.HttpContext.Current.Request["name"];
            //如果不修改文件名,则创建随机文件名
            if (!string.IsNullOrEmpty(_temp))
            {
                name = _temp;
            }
            else
            {
                Random rand = new Random(24 * (int)DateTime.Now.Ticks);
                name = rand.Next() + "." + _suffix;
            }
            //文件保存
            var full = basePath + name;
            files[0].SaveAs(full);
            var _result = "{\"jsonrpc\" : \"2.0\", \"result\" : null, \"id\" : \"" + name + "\"}";
            System.Web.HttpContext.Current.Response.Write(_result);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
           

如有需求,需要修改一下上传位置和上传文件保存文件名等个人设置。

如有问题,请留言交流。

tip:

private void SaveFile(string basePath = "~/Upload/Images/")
           

这句代码应该只有.net4.0才支持。