8

私はasp.netmvc4webapiを使用してある種のサービスを開発しています。1つのフォームで、ユーザーはいくつかのファイルをアップロードしてから、サーバーにフォームを送信する必要があります。問題は、asp.net mvcwebapiへのajaxファイルのアップロードにあります。私はすでにajaxなしでアップロードを実装しました。しかし、私はそれがajaxで行われる必要があります。これはの実装です

public Task<HttpResponseMessage> PostJob()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
    }

    string path = HttpContext.Current.Server.MapPath(string.Format("~/Resources/Documents"));
    MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(path);
    var request = Request.Content.ReadAsMultipartAsync(provider);

    var task = request.ContinueWith<HttpResponseMessage>(t =>
    {
        if (t.IsFaulted || t.IsCanceled)
        {
            return new HttpResponseMessage(HttpStatusCode.InternalServerError);
        }

        string fileName = provider.BodyPartFileNames.FirstOrDefault().Value;
        string originalName = provider.BodyPartFileNames.FirstOrDefault().Key.TrimStart('"').TrimEnd('"');
        string RandomName = provider.BodyPartFileNames.First().Value + Path.GetExtension(originalName);

        FileInfo file = new FileInfo(fileName);
        file.CopyTo(Path.Combine(path, originalName), true);
        file.Delete();


        return new HttpResponseMessage(HttpStatusCode.Created);

    });

HTML5http://www.strathweb.com/2012/04/html5-drag-and-drop-asynchronous-multi-file-upload-with-asp-net-webapi/を使用してこれを行う記事を見つけまし。IE8でこの作業が必要です。多分あなたは何かアイデアがありますか?

どんな助けでもありがたいです、イリーナ。

4

2 に答える 2

14

IE8などのレガシーブラウザでは、AJAXで純粋なJavaScriptを使用してファイルをアップロードすることはできません。これは、ファイル入力でユーザーが選択したファイルの内容にアクセスできないためです。また、このコンテンツにアクセスできないため、サーバーに送信することはできません。

既存のファイルアップロードプラグインのいくつかを使用できます。

彼らはブラウザの機能をテストし、HTML5とAJAXでファイルをアップロードできる新しいXHR2オブジェクトをサポートしている場合はそれを使用します。または、ブラウザがサポートしていない場合、プラグインはFlashまたは非表示のiframeにフォールバックする可能性があります。したがって、レガシーブラウザをサポートする必要がある場合は、選択肢はあまりありませんが、Flashなどの他のクライアントスクリプトテクノロジを使用するか、AJAXリクエストを偽造して実際に通常のマルチパート/フォームデータリクエストを送信する非表示のiframeを使用します。

于 2012-07-28T17:49:50.217 に答える
0

たとえば、7、8、および9には、Silverlightのドラッグアンドドロップコントロールを使用できます。

于 2013-01-30T20:03:26.667 に答える