0

我正在尝试使用 swfupload 插件来上传文件。问题是,我希望用户能够切换要上传到的目录。

奇怪的是(这可能是由于我对 jQuery 的了解有限),在使用警报检查它时,我似乎拥有正确的目录,但上传仍然会转到先前选择的目录。

即,如果我打开页面,然后单击上传链接,则会显示一个名为 uploadPanel 的 div,它会加载 swfupload。我可以很好地进行第一次上传。但是,如果我再选择一个不同的目录,它就行不通了。我已经发出警报以测试当前目录的变量是否正确。此警报始终正确显示当前目录。但是当调用服务器代码中的操作方法时,该目录始终是我在第一次上传时选择的第一个目录。

这是jQuery代码:

<script type="text/javascript">
    var uploadDir;
    $(function () {
        $("#uploadPanel").hide();
        var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";
        loadFileManager(); 

        $("#uploadLink").click(function (event) {
            $('#uploadPanel').show();


            alert("uploadDir: " + uploadDir); //NOTE!!!: This shows the correct current directory, and yet, in post_params below, a previous directory is still sent to the action method in the Controller. How is this possible when the alert shows the correct directory?
            $("#inputFile").makeAsyncUploader({
                upload_url: "/Upload/AsyncUpload/",
                flash_url: '/Scripts/swfupload.swf',
                button_image_url: '/Scripts/blankButton.png',
                post_params: { token: auth, currentDirectory: uploadDir },
                use_query_string: true,
                disableDuringUpload: 'INPUT[type="submit"]'
            });

            $("#closeButton").click(function () {
                $("#uploadPanel").hide();
                $("#inputFile_completedMessage").hide();
            });
        });
    });        

</script>

注意:uploadDir 在其他地方设置,在一个单独的 js 文件中。但关键是,它的值在警报中总是正确的,那么为什么不在对 action 方法的调用中呢?

4

1 回答 1

0

您可以通过调用SWFUloader实例上的setPostParams()方法随意更改POST参数的值,这样就不必每次都重新创建实例。

此外,POST var 就是任意键/值对。为了让它们有意义——在这种情况下,改变上传目录——你必须在你的服务器端代码中处理它们,我假设它在这里:/Upload/AsyncUpload(虽然我有疑问,因为我在这种情况下,会期望这类似于 /Upload/AsyncUpload.asp )。

此外,既然您无论如何都在使用 jQuery,那么您应该考虑使用非常方便的 jQuery.swfupload 插件。使用 SWFUploader 时,使类似加载更容易。

http://github.com/ifunk/swfupload-jquery-plugin

于 2010-09-11T19:19:31.917 回答