gpt4 book ai didi

javascript - 文件上传 API 与 Postman 一起使用,但不与 AngularJS 一起使用

转载 作者:行者123 更新时间:2023-11-29 19:04:34 25 4
gpt4 key购买 nike

我要解决文件上传问题,其中我在前端使用 Angular ,在后端使用 Java,并在 S3 存储桶上上传图像。我认为 Java 代码没有问题,因为当我在 postman 上使用此上传 URL 时一切顺利,我附上 postman 屏幕截图以展示它如何正常工作

POSTMAN REQUEST SCREENSHOT

这是我的AngularJS Controller ,如下所示:

contactUs.controller('contactController', ['$scope','$http', 
function($scope,$http) { $scope.uploadFile = function(){
var file = $scope.myFile;

console.log('file is ' );
console.dir(file);

var uploadUrl = "uploadURL";

var fd = new FormData(file);
fd.append('files', file);

$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': 'multipart/form-data',
'Authorization': 'Basic QHN0cmlrZXIwNzoxMjM0NTY='}
})

.success(function(response){
console.log(response);
})

.error(function(error){
console.log(error);
});
};
}]);

这是我的 AngularJS 指令,如下所示:

contactUs.directive('fileModel', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
console.log(model);
console.log(modelSetter);
element.bind('change', function(){
scope.$apply(function(){
modelSetter(scope, element[0].files[0]);
});
});
}
};
}]);

HTML 如下:

<input type = "file" name="files" file-model = "myFile"/>
<button ng-click = "uploadFile()">upload me</button>

Java Controller 如下:

@Path("/upload")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("application/text")
public Response uploadFile(@FormDataParam("files") List<FormDataBodyPart> bodyParts,@FormDataParam("files") FormDataContentDisposition fileDispositions) {
/* Save multiple files */
BodyPartEntity bodyPartEntity = null;
String fileName = null;
for (int i = 0; i < bodyParts.size(); i++) {
bodyPartEntity = (BodyPartEntity) bodyParts.get(i).getEntity();
fileName = bodyParts.get(i).getContentDisposition().getFileName();
s3Wrapper.upload(bodyPartEntity.getInputStream(), fileName);
}
String message= "File successfully uploaded !!";
return Response.ok(message).build();
}

我在使用 AngularJS 时遇到的错误如下:

400 - 错误请求

最佳答案

1) 要发布文件数据,您不需要提供内容类型作为多部分/表单数据。因为它会自动理解数据类型。所以只需传递 headers: {'Content-Type': undefined}

2) 正如您在 postman 中显示的那样, key 是 files 然后如果您提供 name="files" fd.append("files",file),它不会处理,因为文件键在两边。因此,从 HTML 中删除 name="files" 然后处理上传文件。

关于javascript - 文件上传 API 与 Postman 一起使用,但不与 AngularJS 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com