2016-07-25 12 views
0

角度ファイルのアップロードファイル名のエコー処理に問題があります。Angular FormDataファイル名のエンコーディング

例:ファイルžžž.txtをアップロードしています。結果:žžž.txt

Relevent HTMLフォーム部品:

<form id="fileupload" 
action="/filestore/services/process/upload" 
method="POST" 
enctype="multipart/form-data" 
data-ng-app="MyApp" 
data-ng-controller="DemoFileUploadController" 
data-file-upload="options" 


<input type="file" name="files[]" multiple ng-disabled="disabled" file-change="uploadFile($event, files)"> 

ファイルコントローラ(にconsole.log(ファイル)で印刷)

$scope.uploadFile = function($event, files) { 
    var file = files[0]; 
    var data = new FormData(); 
    console.log(file); 
    console.log(data); 
    data.append('file-0', file); 
    $.ajax({ 
     url: uploadUrl, 
     data: data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     type: 'post', 
     success: function(data) { 
      $scope.reload(); 
     } 
    }); 
}; 

ファイルオブジェクト:

lastModified 1467975647307 
lastModifiedDate Date {Fri Jul 08 2016 14:00:47 GMT+0300 (FLE Standard Time)} 
name "žžž.txt" 
size 7 
type "text/plain" 

投稿リクエストデータ本体:

Source 
-----------------------------2159279631001 
Content-Disposition: form-data; name="file-0"; filename="žžž.txt" 
Content-Type: text/plain 


-----------------------------2159279631001-- 

データ/コードからわかるように、FormDataは不正なファイル名でデータオブジェクトを形成していますが、Fileオブジェクト自体は正しいです...何故でしょうか?これをどのように解決すればよいですか?

編集:

リクエストヘッダ:

Content-Type multipart/form-data; boundary=---------------------------9275749615024 
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 
X-Requested-Wit XMLHttpRequest 

レスポンスヘッダ:

Content-Length 337 
Content-Type application/json;charset=UTF-8 
Server Apache-Coyote/1.1 
+0

を行う必要がありますだけでなく、正しい文字エンコーディングを使用していることを確認します。 –

答えて

0

あなたのAJAXリクエストの上のcontentTypeとエンコーディングを設定する必要があります。あなたがバックエンドを使用している場合は、特定の使用している文字セットとウィッヒに文字セット を変更する必要があります

$.ajax({ 
     url: uploadUrl, 
     data: data, 
     cache: false, 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     processData: false, 
     type: 'post', 
     success: function(data) { 
      $scope.reload(); 
     } 
    }); 

ノートはまた

Zが含まれています。それはおそらく、これは文字セットの問題である

UTF-8は、トリック

+0

リクエストを送信するときに設定されているため、ajaxリクエストのコンテンツタイプを変更することはできません。リクエストヘッダーのコンテンツタイプ: 'multipart/form-data;境界= --------------------------- 9275749615024'。レスポンスヘッダはutf8: 'application/json; charset = UTF-8' – CrazySabbath

+0

リクエストヘッダに表示されているものをコピーしてcontentTypeに入れてください:pasteyourcopy次にcharset = utf-8を追加してください あなたのためには" multipart/form " -data; boundary = 9275749615024; charset = UTF-8 " –

+0

境界線が変更されているので、各要求で同じままではないので、ヘッダータイプをハードコードするのが正しいかどうかはわかりません。 – CrazySabbath

関連する問題