2016-07-25 62 views
0

我在與角上傳文件的文件名ecoding問題。角FORMDATA文件名編碼

示例:上傳文件žžž.txt。結果:žžž.txt

培訓相關的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)"> 

文件控制器:

$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(); 
     } 
    }); 
}; 

File對象(通過的console.log(文件印刷)):

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正在形成不正確的文件名數據對象,而文件對象本身是正確的......任何想法,爲什麼會這樣?我應該如何解決這個問題?

編輯:

請求頭:

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

你應該設置的contentType和編碼在你的Ajax請求。

$.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(); 
     } 
    }); 

注意,你應該改變字符集 您正在使用和將至極特定字符集包含ž

此外,如果你使用的是後端。確保它使用正確的字符編碼以及

UTF-8應該做的伎倆

+0

不要以爲我可以更改ajax請求內容類型,因爲它在發送請求時設置。請求標頭內容類型:'multipart/form-data;邊界= --------------------------- 9275749615024'。響應頭是UTF8:'應用/ JSON的;字符集= UTF-8' – CrazySabbath

+0

只是你所看到的複製請求頭,並將其放置在的contentType:pasteyourcopy然後添加的charset = UTF8 所以對你來說將是「多/形式-data;邊界= 9275749615024;字符集= UTF-8" –

+0

我不知道,如果是硬編碼頭類型一樣,正確的想法,因爲邊界是變化的,不是住每個請求的相同。 – CrazySabbath