0

我正在尝试使用 swfUpload jquery/flash 插件进行上传,我正在遵循 Steven Sanderson 的方法(http://blog.stevensanderson.com/2008/11/24/jquery-ajax-uploader-plugin-带有进度条/)。但我无法让它工作。它在我从他的网站下载的示例应用程序中运行良好。只是为了让它工作,我试图直接在我的应用程序中复制他的页面和所有内容,但它仍然不起作用。

这是页面:

<%@ 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>

(虽然我使用了最新的 jQuery,而不是他的示例中的 1.2.6)。我至少知道脚本被触发了,因为在 FireBug 中我可以看到输入被动态更改为 flash 对象,这是应该的。

问题是, AsyncUpload() 甚至从未被调用过。我在那里设置了一个永远无法到达的断点。而且我遇到了不同的错误。第一次尝试时,脚本的警告框中出现 302 错误。(当时我在同一页面上有其他 jQuery 脚本,所以我只使用这些脚本从一个更干净的页面重新开始)。但是现在我没有收到任何错误,我可以选择图像和全部,但它只是停在文本显示“上传...”的阶段,但我看不到进度条或任何东西,它永远不会结束。

任何想法我做错了什么?

4

2 回答 2

1

使用下面的 CSS 来修复 Firefox 问题

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 回答