Tom*_*sup 14 javascript testing drag-and-drop file-upload angularjs
在我的一个视图中,我有一个文件上传控件.它支持通过拖放或通过单击按钮后打开的标准文件对话框上传文件.
如何在我的e2e测试1中做到这一点?
1只需两个选项中的一个即可
您可以使用 Javascript blob 上传文件。这需要 FileApi,它与旧版浏览器不兼容 ( http://caniuse.com/fileapi )。但既然您提到使用拖放上传(它使用 FileApi),那么它应该不会太重要。
您可以通过两种方式使用 blob API 上传文件。一个非常简单,另一个只是第一个的延续。
使用 Javascript,您可以使用以下命令创建一个新的 blob:
var blob = new Blob("content", contentType);
Run Code Online (Sandbox Code Playgroud)
例如,这将创建一个包含文本“Hello World!”的 blob 对象。
var foo = new Blob("Hello World!", {type: "text/plain"});
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下方法,该方法更适合非纯文本文件,例如 pdf 文件。您必须将文件转换为 Base64(您可以使用类似的内容)并使用 Base64 数据创建 blob。
使用此函数(此函数的稍微修改版本)来创建 blob。
function b64toBlob(b64Data, contentType, sliceSize) {
b64Data = b64Data.replace(/\s/g, '');
contentType = contentType || '';
sliceSize = sliceSize || 1024;
function charCodeFromCharacter(c) {
return c.charCodeAt(0);
}
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = Array.prototype.map.call(slice, charCodeFromCharacter);
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
Run Code Online (Sandbox Code Playgroud)
例如,这将创建一个 PDF blob 对象。
var pdf = "JVBERi0xLjQKJcfsj6IKNSAwIG9...=="; //base64 encoded file as a String
var pdfBlob = b64toBlob(pdf, "application/pdf", 1024);
Run Code Online (Sandbox Code Playgroud)
使用上述方法之一创建 blob 后,可以将其视为文件。例如,您可以将文件放入 FormData 对象中(如果您要像这样进行上传):
var fd = new FormData();
fd.append("uploadedFile", pdfBlob, "My PDF.pdf"*);
Run Code Online (Sandbox Code Playgroud)
*文件名参数目前似乎仅适用于 Chrome。
| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |