0

アップロードに swfUpload jquery/flash プラグインを使用しようとしています。Steven Sanderson によるアプローチに従っています ( http://blog.stevensanderson.com/2008/11/24/jquery-ajax-uploader-plugin- with-progress-bar/ )。しかし、私はそれを機能させることができません。彼のサイトからダウンロードしたサンプル アプリケーションでは問題なく動作します。それを機能させるために、彼のページとすべてをアプリケーションに直接コピーしようとしましたが、それでも機能しません。

ここにページがあります:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head>

    <title>File upload</title>
        <link rel="Stylesheet" href="../../Content/Site.css" />
<%--        <script src="../../Scripts/jquery-1.2.6.min.js"></script>--%>
        <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
        <script type="text/javascript" src="../../Scripts/swfupload.js"></script>

        <script type="text/javascript" src="../../Scripts/jquery-asyncUpload-0.1.js"></script>
    </head>
    <body>
        <div id="MainContents">
            <form enctype="multipart/form-data" method="post">
                <h1>Your profile</h1>
                <p>(In a real app, other form controls would appear here)</p>
                <p>
                    Upload your photo: <input type="file" id="photo" name="photo" />
                </p>

                <input type="submit" value="Save my profile" />
            </form>
        </div>        
        <script type="text/javascript">
            $(function () {
                $("#photo").makeAsyncUploader({
                    upload_url: "/Customers/AsyncUpload/",
                    flash_url: '../../Scripts/swfupload.swf',
                    button_image_url: '/Content/blankButton.png',
                    disableDuringUpload: 'INPUT[type="submit"]'
                });
            });        
        </script>  
        <div id="result"></div>
    </body>
</html>

アクションメソッドは次のとおりです。

    public Guid AsyncUpload()
    {

        return _fileStore.SaveUploadedFile(Request.Files[0]);
    }

これは CustomersController コントローラーにあり、コントローラーの先頭にこれがあります。

private IFileStore _fileStore = new DiskFileStore();

彼がサンプルで行っているように。もちろん、IFileStore インターフェイスと DiskFileStore クラスも用意しています。

head タグに js ファイルと css へのすべての参照があります。

<head>

<title>File upload</title>
    <link rel="Stylesheet" href="../../Content/Site.css" />
    <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="../../Scripts/swfupload.js"></script>
    <script type="text/javascript" src="../../Scripts/jquery-asyncUpload-0.1.js"></script>
</head>

(ただし、彼がサンプルに持っていた1.2.6ではなく、私が持っている最新のjQueryを使用しました)。FireBug では、入力が動的に Flash オブジェクトに変更されていることがわかるため、少なくともスクリプトがトリガーされることはわかっています。

問題は、AsyncUpload() が呼び出されることさえないということです。そこに到達することのないブレークポイントを設定しました。そして、さまざまなエラーが発生しています。初めて試したとき、スクリプトからアラート ボックスに 302 エラーが表示されました。(当時、私は同じページに他の jQuery スクリプトを持っていたので、これらのスクリプトだけを使用してよりクリーンなページからやり直しました)。しかし、今ではエラーは発生しません。画像とすべてを選択できますが、テキストに「アップロード中...」と表示されている段階で停止しますが、進行状況バーなどは表示されず、終わることはありません。

私が間違っていることはありますか?

4

2 に答える 2

1

Firefoxの問題を修正するために以下のCSSを使用してください

DIV.ProgressBar { 
    width: 100px; padding: 0; border: 1px solid black; margin-right: 1em;
    height:.75em; margin-left:1em; display:-moz-inline-stack;
    display:inline-block; zoom:1; *display:inline; 
}
DIV.ProgressBar DIV { 
    background-color: Green; font-size: 1pt; height:100%; float:left; 
}
SPAN.asyncUploader OBJECT { 
    position: relative; top: 5px; left: 10px; 
}
于 2012-01-20T14:04:06.283 に答える
0

問題は、Firefoxでは機能せず、IEのみで機能したことであることが判明しました(変更のため...)。クッキー入りのもの。興味のある方は、上記で参照した Steven Sanderson のブログのコメント セクションを参照してください。

于 2010-08-28T23:58:09.173 に答える