0

我正在使用带有 ashx 文件示例的 valums 上传器,我发现和 tweeked,并且希望在上传时将每个文件的数据保存到数据库中,单步执行代码,似乎没有任何方法可以区分上传的文件哪个命令,看某个变量,代码到处乱跳。它适用于单个文件,但超过 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();

有任何想法吗?

4

1 回答 1

1

我使用 valuems 上传器没有问题。不同的浏览器以不同的方式上传文件。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);

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

于 2012-05-15T12:11:23.830 回答