Valums上传器和数据库保存在多个文件上

时间:2012-05-15 11:10:39

标签: c# asp.net

我正在使用valums uploader和我找到的ashx文件示例&我想上传,当我上传代码时,想要将数据从每个文件保存到数据库,似乎没有办法区分哪个文件以哪种顺序上传,看着某个变量,代码跳到了一个地方。它适用于单个文件,但超过1是一个问题。此外,context.Request.Files.Count始终为0

            byte[] buffer = new byte[request.ContentLength];

            fileName = request.RawUrl.Split('=')[1];
            fmt = Path.GetExtension(fileName);

            using (BinaryReader br = new BinaryReader(request.InputStream)) 
            br.Read(buffer, 0, buffer.Length);

            File.WriteAllBytes(StorageRoot + request["qqfile"], buffer);

            success = false;
            context.Response.Write("{success:true}");
            HttpContext.Current.ApplicationInstance.CompleteRequest();

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我已经毫无问题地使用了valums uploader。不同浏览器以不同方式上传文件。 IE将使用文件上传html控件,而Firefox& Chrome可以做到Ajax风格。我编写了自己的上传处理程序,但您需要做的第一件事就是确定使用了哪种方法。

我是这样做的:

if (HttpContext.Current.Request.QueryString["qqfile"] != null)
    file = new UploadedFileXhr();
else if (HttpContext.Current.Request.Files.Count > 0)
    file = new UploadedFileForm();
else
    return new UploadResult("Request was not valid.");

XHR上传意味着您从输入缓冲区读取如下:

int read = HttpContext.Current.Request.InputStream.Read(buffer, 0, buffer.Length);

while (read == buffer.Length)
{
    ms.Write(buffer, 0, buffer.Length);
    read = HttpContext.Current.Request.InputStream.Read(buffer, 0, buffer.Length);
}

ms.Write(buffer, 0, read);

文件上传更简单:

UploadResult result = new UploadResult(true);
result.Stream = _File.InputStream;
result.Name = System.IO.Path.GetFileName(_File.FileName);

即使您在客户端添加多个文件,每个文件也会单独上传。