0

私が見つけて微調整したashxファイルの例でvalumsアップローダーを使用しています。アップロード時に各ファイルからデータベースにデータを保存したいのですが、コードをステップスルーします。どのファイルがアップロードされているかを区別する方法はないようですどの順序で、特定の変数を監視すると、コードはあちこちにジャンプします。単一のファイルでは問題なく機能しますが、複数のファイルは問題です。また、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

valums アップローダーを問題なく使用しました。ブラウザが異なれば、ファイルのアップロード方法も異なります。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 に答える