完毕,
问题出在提供给myZone.addFile()
.If 您打开dropzone.js
文件并在其中执行Dropzone.prototype.init
功能的 FileList 对象的格式上,您将看到一个检查
if (this.clickableElements.length) {
在此检查 dropzone 创建和配置隐藏文件输入,然后将该输入元素附加到正文document.body.appendChild(_this.hiddenFileInput);
,并在此行之后 dropzone 将事件侦听器添加change
到创建的文件类型输入,一旦我们通过浏览文件窗口提供文件就会触发。
return _this.hiddenFileInput.addEventListener("change", function() {
当我们提供文件时,它会触发并创建FileList
对象,请参见
files = _this.hiddenFileInput.files;
如果您尝试在控制台中记录它,console.log(files)
您将看到一个 FileList,它是
FileList { 0=File, length=1, item=item(), more...}
在 firebug 中单击此对象时创建的,您将在下面看到详细信息
0 File { size=21789, type="image/png", name="1-7-2013 6-19-44 PM.png", more...}
length 1
__proto__ FileListPrototype { item=item(), @@iterator=@@iterator()}
现在我创建文件列表对象的方式结果如下
_removeLink ----- a.dz-remove javascrip...defined;
accept ----- "image/jpg,image/gif,image/png,image/jpeg"
accepted ----- true
mozFullPath ----- "http://mysite/img/imageUploadTestJPG.jpg"
name ----- "imageUploadTestJPG.jpg"
path ----- "http://mysite/img/imageUploadTestJPG.jpg"
previewElement -- div.dz-preview
previewTemplate --- div.dz-preview
processing ----- true
size 30170
status ----- "uploading"
type "image/jpeg"
upload ----- Object { progress=0, total=30170, bytesSent=0}
xhr XMLHttpRequest { readyState=1, timeout=0, withCredentials=false, more...}
length 0
__proto__ FileListPrototype { item=item(), @@iterator=@@iterator()}
请注意第一个详细信息上的索引0
,其中包含文件的详细信息,而第二个是我自定义构建的 FileList 对象的结果,该索引在 main 上而不是在索引内部具有文件的所有详细信息0
。
所以要创建类似的对象,我必须首先
- 通过向图像发送
xmlHttpRequest
请求来获取 blob
- 指定响应类型
arraybuffer
- 获取
blob URL
图像数据的 a。
- 将该响应分配给文件对象并将其分配给
input.file
- 调用
Dropzone.addFile()
.
该过程的完整描述如下,您可以在不打开文件浏览窗口的情况下上传文件并dropzone.js
使用selenium
// Simulate a call to service that can
// return an image as an ArrayBuffer.
var xhr = new XMLHttpRequest();
// Use JSFiddle logo as a sample image to avoid complicating
// this example with cross-domain issues.
xhr.open( "GET", "http://localhost/path/to/my/image.jpg", true );
// Ask for the result as an ArrayBuffer.
xhr.responseType = "arraybuffer";
xhr.onload = function( e ) {
// Obtain a blob: URL for the image data.
var arrayBufferView = new Uint8Array( this.response );
var blob = new Blob( [ arrayBufferView ], { type: "image/jpeg" } );
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL( blob );
var parts = [blob, new ArrayBuffer()];
file = new File(parts, "imageUploadTestFile", {
lastModified: new Date(0), // optional - default = now
type: "image/jpeg"
});
$("input[accept=\'image/jpg,image/gif,image/png,image/jpeg\']").files = [file];
myzone = Dropzone.forElement(".imageDropzone");
myzone.addFile(file);
};
xhr.send();