javascript – 如何在POST到服务器之前正确地将文件附加到formData?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何在POST到服务器之前正确地将文件附加到formData?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2781字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何在POST到服务器之前正确地将文件附加到formData?](/upload/InfoBanner/zyjiaocheng/699/c39df93d0d5f45bfa8d7cbb21a9cda46.jpg)
我一直关注这个FormData tutorial here,但还没有理解formData object如何运作.
我的输入表格
<input type="file" id="file-id" class="w300px rounded4px" name="file" placeholder="PDF file">
<button class="btn-upload-pdf" ng-click="asub.uploadPDF()">Upload</button>
这是上传按钮功能:
this.uploadPDF = () => {
const formData = new FormData();
const fileInput = document.getElementById('file-id');
const file = fileInput.files[0];
formData.append('pdf-file', file);
console.log('formData', formData)
return ApiFactory.insightPDF(formData).then((res) => {
console.log('res', res);
return res;
});
};
当我注销fileInput对象.files [0]时,我看到我刚刚附加的文件:
这似乎意味着这个对象应该足以发送到POST.然而,这是下一步:
formData.append(‘pdf-file’,file);
我在将它发送到工厂之前注销了formData,这就是结果,我没有在任何地方看到关键的pdf文件或PDF,只是一堆方法?文件在哪里也附加了? formData如何包含实际的PDF?
我需要从我假设的formData对象中附加一些东西:
发出POST请求的Factory
const insightPDF = (formData) => {
console.log(' formData', formData)
return $http.post('/app/api/insights_pdf', formData).then((res) => {
console.log('PDF uploaded res', res)
return res;
}).catch(apiError);
};
解决方法:
设置内容类型:未定义
发布由FormData API创建的对象时,将内容类型标头设置为undefined非常重要.
const insightPDF = (formData) => {
console.log(' formData', formData)
var config = { headers: {'Content-Type': undefined} };
return $http.post('/app/api/insights_pdf', formData, config)
.then((res) => {
console.log('PDF uploaded res', res)
return res;
}).catch(apiError);
};
通常是AngularJS框架,自动添加内容类型标题作为application / json,它覆盖XHR Send() method设置的内容类型.当XHR API发送FormData object时,它会自动将内容类型设置为具有适当边界的multipart / form-data.
来自Docs:
The $http service will automatically add certain HTTP headers to all requests
To explicitly remove a header automatically added via
$httpProvider.defaults.headers
on a per request basis, Use the headers property, setting the desired header toundefined
. For example:06001
07004
像blobs这样的FormData objects是非JavaScript原生的主机定义对象.并非console.log或console.dir可以看到它们的所有属性. Files是一种特殊类型的blob.数据不一定从磁盘加载.通常,仅在特定API需要时才从磁盘流式传输数据.
避免额外开销 – 直接发送文件
multipart / form-data中的内容使用base64 encoding,这增加了33%的额外开销.如果只上传一个文件,则直接发送文件blob更有效.
//MORE Efficient; Avoids base64 encoding overhead
const insightPDF = (dataObject) => {
var config = { headers: {'Content-Type': undefined} };
return $http.post('/app/api/insights_pdf', dataObject, config)
.then((res) => {
console.log('PDF uploaded res', res)
return res;
}).catch(apiError);
};
var file = inputElem[0].files[0];
insightPDF(file);
如果服务器可以直接接受二进制内容,最好以这种方式发送文件. XHR API将自动将内容类型设置为文件的内容类型.
内容总结
以上是互联网集市为您收集整理的javascript – 如何在POST到服务器之前正确地将文件附加到formData?全部内容,希望文章能够帮你解决javascript – 如何在POST到服务器之前正确地将文件附加到formData?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。