更改ng文件上传的内容类型

时间:2017-01-06 11:45:26

标签: angularjs ng-file-upload

我正在尝试使用ng-file-upload上传文件。我在大多数情况下都有这个工作,但是API中有一个被调用的错误,这意味着.xlsx文件没有正确上传。其他文件类型确实有效。我被告知强制将有效负载中的Content-Type强制为'application / x-zip-compressed'允许文件上传。不幸的是,我无法弄清楚如何改变这一点。有效载荷如下所示:

------WebKitFormBoundary9rVv6WxE2BM7vFxz
Content-Disposition: form-data; name="file[0]"; filename="My Excel File.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet


------WebKitFormBoundary9rVv6WxE2BM7vFxz--

但需要看起来像这样:

------WebKitFormBoundary9rVv6WxE2BM7vFxz
Content-Disposition: form-data; name="file[0]"; filename="My Excel File.xlsx"
Content-Type: application/x-zip-compressed


------WebKitFormBoundary9rVv6WxE2BM7vFxz--

任何人都可以帮忙解决这个问题吗?我试过更改文件对象上的type属性,但是没有进行更改。

执行上传的功能是

$scope.uploadThenRun = function (file) {
    Upload.upload({
        url: 'https://'+ ppService.ppServer+ ':'+ ppService.sslPort + '/jobs/',
        data: {file: file}
    }).then(function (resp) {
        var jobID = resp.data.data.value;
        $scope.loadParentFormulation(jobID);        
    }, function (resp) {
    }, function (evt) {
    });

这是从div这样调用的:

<div class="my-drop-zone">
      <div ngf-drop="uploadThenRun($files)" class="drop-box well"
       ngf-drag-over-class="'dragover'" ngf-multiple="true">Drop your file here</div>
</div>

这是发送的网络请求。这是有效载荷中需要更改的内容类型。

Network screen grab

希望有人可以提供帮助

2 个答案:

答案 0 :(得分:1)

您可以在上传之前更改文件类型,如下所示:

if (file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
  file = file.slice(0, file.size, "application/x-zip-compressed")
}
Upload.upload({..., data: {file: file}, ...})

这会使您的新类型文件具有相同的内容。

答案 1 :(得分:0)

您可以使用标题定义内容类型。

$scope.uploadThenRun = function (file) {
    Upload.upload({
        url: 'https://'+ ppService.ppServer+ ':'+ ppService.sslPort + '/jobs/',
        data: {file: file},
        headers : {'Content-Type': 'application/x-zip-compressed'}
    }).then(function (resp) {
        var jobID = resp.data.data.value;
        $scope.loadParentFormulation(jobID);        
    }, function (resp) {
    }, function (evt) {
    });