如何将文件从本地上传到本地URL?
$scope.files = [];
$scope.uploadFile = function() {
var fd = new FormData()
for (var i in $scope.files) {
fd.append("fileToUpload", $scope.files[i]);
}
var urlDir = "http://localhost/mecenazgos/";
//Upload the files
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", urlDir);
scope.progressVisible = true;
xhr.send(fd);
我已经安装了wamp服务器以在url中使用它,但它给我一个错误:
有什么想法吗?
发布于 2017-01-16 13:17:41
这是一个CORS问题-您正在从本地主机服务您的脚本,但可能是通过不同的端口。为了成功,POST
请求URL必须与您提供服务的来源相匹配,包括端口。您必须配置您的服务器以返回适当的访问控制标头,例如,如果您从该来源提供客户端脚本,则返回Access-Control-Allow-Origin: http://localhost:3000
。
发布于 2017-01-17 01:28:26
如何使用$http服务发布FormData
使用FormData API发布文件和数据时,将Content-Type header设置为undefined
非常重要。
var fd = new FormData()
for (var i in $scope.files) {
fd.append("fileToUpload", $scope.files[i]);
}
var config = {headers: {'Content-Type': undefined}};
var httpPromise = $http.post(url, fd, config);
默认情况下,AngularJS框架使用内容类型application/json
。通过设置Content-Type: undefined
,AngularJS框架省略了允许XHR API设置内容类型的内容类型标头。在发送FormData object时,XHR使用适当的边界和base64编码将内容类型设置为multipart/form-data
。
有关更多信息,请参阅MDN Web API Reference - XHR Send method
使用
$http
和XMLHttpRequest
有什么区别?哪一个更好?为什么?
$http服务是XMLHttpRequest (XHR)应用编程接口的AngularJS包装器。它将基于回调的异步应用程序接口转换为基于$q服务承诺的应用程序接口。它与AngularJS框架及其摘要周期集成在一起。
如果应用程序使用AngularJS框架呈现模型,它应该使用AngularJS框架与服务器通信。
Angular将您从以下痛苦中解放出来:
而与大量初始化代码来回传递的HTML DOM programmatically
有关详细信息,请参阅:
https://stackoverflow.com/questions/41676313
复制