2016-07-25 2 views
0

각도 파일 업로드 파일 이름에 문제가 있습니다.각 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)"> 

파일 컨트롤러 (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

당신은 아약스 요청 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

요청을 보낼 때 설정되었으므로 아약스 요청 내용 유형을 변경할 수 있다고 생각하지 마십시오. 요청 헤더 내용 유형 :'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

관련 문제