2017-07-18 11 views
0

どのようにしてpdfファイルを送信できますか?私はオンラインで複数の方法を見つけましたが、それらのほとんどは現在のシステムがどのように動作しているかを再検討するもので、理想からはほど遠いものです。POSTでファイルをアップロードするにはどうすればよいですか?

私は角度に慣れていませんが、サーバーにファイルをアップロードしようとしています。私は既存のアーキテクチャーを使用しているので、単に問題を簡単に書き直すだけの問題ではありません。私がマルチパートファイルとして送信しようとすると、 "現在のリクエストはマルチパートリクエストではありません"とSpringは苦情を言いますが、その方法を知っていません。ファイルタイプはBlobタイプでなければなりません。現在、エラーはスローされませんが、data.contentはデータブロックの送信後に空です。ここで

私が現在持っているものです。

$scope.uploadPDF = function(uploadedPDF) { 
    var url = 'uploadPDF'; 
    data = {}; 
    data.comments = $scope.worksheet.comments; 
    data.queryId = $scope.qId; 
    data.responseId = $scope.responseId; 
    data.requestTS = new Date().getTime(); 
    data.content = uploadedPDF; 
    $http.post(url, data); 
}; 

、それがこれです呼び出す関数、それは、ファイルを引き込む名を生成し、サーバーサイドの処理されるプロパティとして名前を追加し、いくつかの処理を行い

$scope.addPDF = function() { 

var pdfUploads = document.getElementById('file'); 
    if ('files' in pdfUploads) 
    { 
    if (pdfUploads.files.length == 0) 
    { 
     $scope.setReasonForChange("addPDF"); 
    }else 
    { 
     for (var i = 0; i < pdfUploads.files.length; i++) 
     { 
      var currentTimeZone = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'}).split(' ')[2]; 
      $scope.militaryTime = $filter('date')(Date.now(), "MM-dd-yyyy_HHmm"); 
      pdfUploads.files[i].generatedFileName = "QID-" + $scope.queryId + "_" + $scope.worksheet.response.PDF_DESCRIPTION + "_" + $scope.militaryTime + currentTimeZone + ".PDF"; 
     } 
    } 
} 

    var pdfComment = document.getElementById("pdfComment").value; 
    if (!pdfComment) 
    { 
     $scope.setReasonForChange("updatePDF"); 

    } else 
    { 
     var blobPDF = new Blob([pdfUploads.files[0]], {type: 'application/pdf'}); 
     $scope.uploadPDF(blobPDF); 
    } 
} 

HTMLは次のとおりです:

<form name="UploadForm" id="UploadForm" class="details" form-on-change="formChanged()" enctype="multipart/form-data"> 
      <input type="file" multiple size="50" id="file" name="file" ng-disabled="is_readonly"/> 
      <button ng-click="addPDF()" ng-disabled="is_readonly">Add</button> 
</form> 
非関連ロジックは、その後、送信用の上記の関数を呼び出します

そして最後に、サーバー側iは、データが値をサーバにから取られ、処理されているのLinkedHashMapの一部だと思うところ、このです:

@ResponseBody 
@RequestMapping(value = "/uploadPDF", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseAttachment uploadPDF(@RequestBody Data data, HttpServletRequest request) throws Exception { 
    User user = (user) request.getSession(false).getAttribute(FieldConstants.USER_SESSION_ATTR); 
    ResponseAttachment newPDF = responseAttachmentService.addAttachment(data, user.getUserId()); 

    return newPDF; 

現在のところ、それは場所を除いて、データを送受信しますファイルは空であるはずです。

私はng-fileuploadを試みましたが、それを私たちの製品に付けることは悪夢です。特に、その使用法は、ユーザーが既に少しの文書を持っているので、角度の使い方を既に知っている必要があると考えています。人。

答えて

1

This question may help you.

基本的には、純粋にJSON形式でファイルを送信することはできません。あなたはマルチパートフォームを使用し、それをそのようにポストする必要があります。たとえば:

postFile(file) { 
    var postData = new FormData(); 
    postData.append('File', file); 

    var params = { 
    headers: { 
     "Content-Type": undefined 
    } 

    $http.post(url, data, params).then([...]); 
} 

は、あなたはそれが正しく送信されるように、余分なContent-Typeのparamが必要になります。

+0

ありがとうございました!私はこれが私が必要とするものだと思う! –

関連する問題