2016-07-21 5 views
8

角度2でng2-file-uploadを使用しています。ファイルアップロードアクションでフォームデータを送信する方法はありますか?角度2でng2ファイルをアップロードして投稿データを送信する方法は?

+0

あなたがやりたいと思っているまさにのより多くの詳細な説明をお願いできますか?私はそのパッケージを使って作業しています。私はあなたが達成しようとしていることを理解するのに苦労しています。 –

+0

フォームビルダーを使用して1つのユーザーフォームを作成しています。ユーザーフォームには、ファーストネーム、ラストネーム、Eメール、profile_imag、ステータスなどのフィールドがあります。 1つのサーバー呼び出しを使用して、profile_imageデータですべてのユーザー入力データ(ファーストネーム、ラストネーム、電子メールなど)を投稿する方法。 私はバックエンドとしてlaravelを使用しています。 – Ghanshyam

+0

例を見ると 'item.upload()'があり、 'item'に' item.formData'というプロパティがあります。フォームデータを 'item.formData = yourFormData'経由で取得します。私はこの方法でパッケージを使用していません。 –

答えて

15

これは私がng2-file-uploadを使用して同じ問題を抱えていますませ答え、しかしです。彼らはonBeforeUploadItemと呼ばれるフックを持っています。私は以下を試した。

ngOnInit() { 
this.uploader.onBeforeUploadItem = (fileItem: any) => { 
    fileItem.formData.push({ someField: this.someValue }); 
    fileItem.formData.push({ someField2: this.someValue2 }); 
}; 
} 

私がfileItem.formDataの内容をログアウトすると、すべての値がそこにあります。しかし、これらのフォーム要素はサーバーに戻ってこないようです。私はChromeを使用しています.HTTPポストを見ると、次のようになります。

リクエストヘッダ

 
POST /api/upload/csv HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 228 
Origin: http://localhost:4200 
x-access-token: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyb290IiwiYWRkciI6IjA6MDowOjA6MDowOjA6MSIsInNjaGVtZSI6Imh0dHAiLCJwb3J0IjoiODA4MCIsImlhdCI6MTQ2OTUwMzM1NX0.jICVQdZD-6m705sZsaQJ5-51LztdIx9pAAKgVYgL3HRMMgrJh6ldFbYvUVtA_UQkSrvCrNJeWeo4C7QYe2W4Cw 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCSUTihSBrgmwjxg1 
Accept: */* 
Referer: http://localhost:4200/main 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Cookie: _ga=GA1.1.941072201.1467616449; token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyb290IiwiYWRkciI6IjA6MDowOjA6MDowOjA6MSIsInNjaGVtZSI6Imh0dHAiLCJwb3J0IjoiODA4MCIsImlhdCI6MTQ2OTUwMzM1NX0.jICVQdZD-6m705sZsaQJ5-51LztdIx9pAAKgVYgL3HRMMgrJh6ldFbYvUVtA_UQkSrvCrNJeWeo4C7QYe2W4Cw 

要求ペイロード

 
------WebKitFormBoundaryCSUTihSBrgmwjxg1 
Content-Disposition: form-data; name="file"; filename="data.csv" 
Content-Type: text/csv 


------WebKitFormBoundaryCSUTihSBrgmwjxg1-- 

何が起こっているの任意のアイデア?ファイルをアップロードするときに、そのファイルで追加のフォーム値を送信する必要があります。

私はかなり近かった。ソリューションはonBuildItemFormを無効にすることでした。

ngOnInit() { 
this.uploader.onBuildItemForm = (fileItem: any, form: any) => { 
    form.append('someField': this.someValue); 
    form.append('someField2': this.someValue2); 
}; 
} 

インスタンスformFormDataです。私のHTTPポストを見ると、私のフォームフィールドの値がサーバーに送られているのがわかり、私のサーバーは実際に値を見ています。それがあなたを助けることを願っています。

+0

このように投稿すると、someFieldをマルチフォームデータとして投稿していますそれはreq.bodyと一緒です。値を取得するには、multerのような別のパッケージを使用しなければなりません。そして、それはreq.bodyとして 'someField'を添付します。 – VtoCorleone

+0

@ JaneWayneあなたが複数のファイルを作成し、それらのすべてに異なる情報を添付したい場合、これがどのように機能するかご存知ですか? – Androidicus

+5

はちょうど何人かの人々をトリップかもしれないディテールを追加: form.append方法は次のとおりです。 'form.append(「キー」、値);' *コロン、名前&値の間にカンマ分離をない注意してください。 – jacobedawson

2
this.uploader.onBeforeUploadItem = (item: FileItem) => { 
    item.withCredentials = false; 
    this.uploader.authToken = 'Bearer ' + this.boxTokenResponse.userToken; 
    this.uploader.options.additionalParameter = { 
    name: item.file.name, 
    parent_id: this.parentFolderId 
    }; 
}; 

これは、file-uploader.class.jsがフォームデータをパンする方法です。サーバー内のデータにアクセスするためのよう

if (!this.options.disableMultipart) { 
     sendable = new FormData(); 
     this._onBuildItemForm(item, sendable); 
     sendable.append(item.alias, item._file, item.file.name); 
     if (this.options.additionalParameter !== undefined) { 
      Object.keys(this.options.additionalParameter).forEach(function (key) { 
       sendable.append(key, _this.options.additionalParameter[key]); 
      }); 
     } 
    } 
+0

それは魅力のように動作します!友よありがとう! –

+0

サーバーサイドで追加値が渡された場合、そのアクセス方法は? – Hitesh

+0

一般に、サーバー側では、http要求のヘッダーオブジェクトにアクセスし、特定のヘッダーキーと値の一覧を探す必要があります。 –

0

、それはMulterを使用して行うことができます。

const multer = require('multer'); 
    let DIR = './uploads/'; 

    let upload = multer({dest: DIR}).single('givenitemAlias'); 
     router.post('/upload', function (req, res, next) { 
      console.log(req.body);//empty object 
      upload(req, res, function (err) { 
       if (err) { 
        // An error occurred when uploading 
        return res.status(422).send("an Error occured") 
       } 
       // No error occured. 
       console.log(req.body);//modified req.body with out key value pairs 
       console.log(req.file);//metadata of the file 
       return res.send("Upload Completed for "+temppathOfUploadedFile); 
      });    
     }); 
関連する問題