24

プロジェクトでblueimpjQueryFileUploadを使用しようとしています。それは私のニーズにかなりよく合っていますが、プラグインが作成されて構成された後、URLファイルが動的にアップロードされるように変更する必要があります。私はかなりの調査を行いましたが、残念ながら、何も役に立ちませんでした。一般的に、実際のアップロードをカバーするファイルとファイルアップロードアクションを選択するためのボタンがあります。基本的な作成は次のようになります。

 $('[upload-button]').fileupload(new FileUploadConfig()) 

そして構成自体:

 function FileUploadConfig() {

     // is set to a unique value for each file upload
     this.url = 'temporary';
     this.fileInput = $('[upload-button]');

     //... some other code
 }

私がする必要があるのは、この構成のURLを変更してから、を呼び出すことdata.submit()です。私は、この構成がこのよう$.data()なコードを使用して保存され、問題を解決しようとしたことを発見しました

// get the current fileupload configuration
var config = $.data($('[upload-button]').get(0), 'fileupload');

// change the url configuration option
config.options.url = file.link;

//send a file
data.submit();

しかし、これは私が望んでいたようには機能しません。

これを達成する方法について何かアイデアはありますか?

4

10 に答える 10

29

後世のためにここでこれをキャプチャするだけです。

現在の jQuery アップロード リビジョンで、add(evt,data) 関数をオーバーライドし、データ オブジェクトの url プロパティを設定します。

fileupload({
   add: function(e, data) {
      data.url = 'customURL'
      ...
   },
   ...
}
于 2013-10-24T01:55:29.457 に答える
4

コールバックを設定autouploadtrueてバインドすることにより、異なる id パラメータを持つ URL にファイルをアップロードしたいときに、これを達成しました。fileuploadstart

<script type='text/javascript'>
    $(function () {
        'use strict';
        $('#fileupload').fileupload({
            url: 'originalurl/dest/1'
            autoUpload: true            
        }).bind('fileuploadadd', function (e, data) {
            var that = $(this).data('fileupload');              
            that.options.url = 'originalurl/dest/' + $("#selctedlocation").val();

        });
    });

于 2013-02-19T14:51:28.877 に答える
3

.bind('fileuploadsubmit')部分を追加する必要があります。以下の例を参照してください。

function fnFileUpload(id, urlFunc, successurl) {
    $(id).fileupload({
        url: urlFunc(),
        dataType: 'json',
        maxFileSize: 10000000,
        singleFileUploads: true,
        done: function (e, data) {
            $(this).fileupload('option', 'url', urlFunc());
            if (data.result.respType == 'S') {
                window.location.href = successurl;
            } else {
                toastr.error(data.result.respDesc, data.result.respTitle);
                var progress = 0;
                $('#progress .progress-bar').css(
                    'width',
                    progress + '%'
                );
            }
        },
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            $('#progress .progress-bar').css(
                'width',
                progress + '%'
            );
        }
    }).bind('fileuploadsubmit', function (e, data) {
        $(this).fileupload('option', 'url', urlFunc());
    });
}
于 2015-10-10T12:02:40.443 に答える
1

これを行う方法の一般的な例を次に示します。

$('#fileupload').fileupload({
    url: initial_url,
    done: function (e, data) {
        $(this).fileupload('option', 'url', new_url);
    }
});

これを使用して、アップロード スクリプトによって返された結果に基づいて URL を変更するため、done コールバックの先頭に new_url = data.result.new_url を設定します。

于 2013-12-13T14:46:19.820 に答える
0

ダブブリンの答えに追加するには:

fileuploadstart はデータを提供せず、イベントを提供するだけなので、バインドしているイベントは fileuploadadd にある必要があると思います。

https://github.com/blueimp/jQuery-File-Upload/wiki/Options

于 2013-04-18T06:48:08.863 に答える
0

これでうまくいくはずです(@ Aneonの答えに似ています)私にとってはうまくいくようです:

var file = { link: "http://thenewurl" };

// I used a form element to create the fileupload widget
$('[upload-button]').fileupload("option", "url", file.link);

// Submit the form
$('[upload-button]').submit();

この関数呼び出しの後の任意の時点でフォームを送信すると、新しい URL が使用されます

(画像が選択されるとすぐにコードが送信されますが、手動送信呼び出しはテストされていません)。

于 2014-01-09T01:38:32.763 に答える