在HTML5 Rocks上有一些很好的文件上传示例,但有些内容对我来说不够清晰.
据我所知,关于文件切片的示例代码是从文件获取特定部分然后读取它.正如笔记所说,当我们处理大文件时,这很有用.
关于监控上传的示例还指出,当我们上传大文件时,这非常有用.
我没有切片文件安全吗?我的意思是服务器端问题,内存等.File.slice()目前Chrome不支持,如果可能,我不想使用膨胀的jQuery插件.
我认为解决这个问题的方法是盯着我,但我似乎无法找到它.
所以,我正在创建一个具有小文件上传部分的网站.上传部分可以为不同的设备和设备方向(即iPhone,iPad,纵向和横向)上传图像.我可以很容易地弄清楚如何在各个设备图标上实现拖放,但如果用户错过掉落区域,浏览器将只导航到他们系统上的该图像.如果没有文件输入类型来接收拖动的文件,如何禁用拖放?
我正在寻找在JavaScript中实现低冲突的快速哈希.它不需要是加密哈希.我基本上使用它来查看某个给定文件是否已经上传(或部分上传)到用户的帐户,以便在大(视频)文件上保存一些上传时间.
我正在使用新的HTML5文件API来读取文件的切片.然后我把它交给SparkMD5给我一个文件的哈希值.我喜欢SparkMD5允许我进行增量散列的事实,所以我不必在内存中读取整个内容.
总的来说,SparkMD5可以满足我的需求,但对于大型文件,它可能需要一段时间才能获得我的哈希值(300MB文件大约需要30秒).我希望减少这一点.我不是那么了解哈希函数,所以我不想寻找一些东西,并且理想地寻找已经实现的库.
我正在尝试设置一个文件存储空间以供以后在Phonegap中使用,但现在在Chrome中进行调试.按照html5rocks中描述的方式只允许我从用户请求配额,但是不执行请求文件系统时的回调.看到:
window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024*1024, function(grantedBytes) {
requestFS(grantedBytes);
}, onError);
function requestFS(grantedBytes) {
window.webkitRequestFileSystem(window.PERSISTENT, grantedBytes, function(fs) {
// ... does not get called ###################################
}, onError);
}
Run Code Online (Sandbox Code Playgroud)
现在Chrome警告我,webkitStorageInfo已被弃用,并且今天有一个新标准https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html.我尝试使用navigator.webkitPersistentStorage但没有成功.
文件系统API是否可能当前不工作或已被弃用,或者我的上述代码可能有问题?
下面的函数也没有做任何事情,没有错误可见:
navigator.webkitPersistentStorage.queryUsageAndQuota(function(usage, quota) {
console.log(arguments);
navigator.webkitPersistentStorage.requestQuota(1024 * 1024, function(grantedQuota) {
console.log(arguments);
window.webkitRequestFileSystem(window.PERSISTENT, 1024 * 1024, function(fs) {
console.log(arguments);
});
});
});
Run Code Online (Sandbox Code Playgroud)
我得到了Eric Bidelman工作的Filer,所以我的代码中的某些东西一定是错的,尽管我看不出Filer init方法和我正在做的事情之间的区别.
我使用HTML5文件API来读取二进制文件.用户可以选择多个文件,然后单击按钮将它们复制到JavaScript对象中.我的代码列在这里:
<script>
var data = new Object;
function ReadFiles()
{
var files = document.getElementById('file').files;
for (var i = 0; i < files.length; i++) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
data["File_Content" + i] = btoa(evt.target.result);
}
};
reader.readAsBinaryString(files[i]);
}
}
</script>
<input type="file" id="file" name="file[]" multiple />
<button onclick="ReadFiles();">Read Files</button>
Run Code Online (Sandbox Code Playgroud)
如果用户输入三个文件,则只有无效的属性"File_Content3"将被添加到具有值的"data"对象中; 不创建其他三个有效属性'File_Content0','File_Content1'和'File_Content2'.
任何人都可以解决这个问题吗?谢谢.
在打包的Chrome应用中,我正在尝试从PERSISTENT存储中的文件中读取,如果它不存在则创建它:
window.webkitRequestFileSystem(PERSISTENT, 1024*1024, function(fileSystem) {
fileSystem.root.getFile('file.txt', {create: true}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
console.log(this.result);
};
reader.readAsText(file);
}, errorHandler);
}, errorHandler);
});
Run Code Online (Sandbox Code Playgroud)
但是我收到了The operation failed because it would cause the application to exceed its storage quota.错误.TEMPORARY存储给了我同样的错误.我应该在manifest.json中指定什么吗?
在Firefox中,以下代码在主浏览器线程中正常运行时正常工作 -
var fr = new FileReader();
Run Code Online (Sandbox Code Playgroud)
..但是当从Web worker运行时,会抛出以下错误:
FileReader is not defined
Run Code Online (Sandbox Code Playgroud)
相同的代码在Chrome和Safari中运行良好.
在Firefox中支持Web worker的FileReader的任何建议?
我正在创建一个Chrome应用程序.我必须读取目录的文件,我正在使用DirectoryEntry API和DirectoryReader API.
我的问题是使用DirectoryReader #readEntries读取的最大文件数是100,前100个(字母顺序)
var reader = currentDir.createReader();
var read = reader.readEntries.bind(reader, function(files) {
for ( var i = 0; i < files.length; i++){
if (files[i].name == nameSearches){
callback(files[i]);
}
}
})
callback(undefined)
}
read();
Run Code Online (Sandbox Code Playgroud)
files.lengthis 的值是100,目录中有更多文件
我不确定这个限制是关于谷歌浏览器,谷歌Chrome应用程序,Javascript ......以及是否可以克服此限制
随着解决方案标记结果代码是这样的:
var reader = currentDir.createReader();
var read = reader.readEntries.bind(reader, function(files) {
if (files.lenght == 0) {
callback(undefined);
}
for ( var i = 0; i < files.length; i++){
if (files[i].name == nameSearches){
callback(files[i]); …Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension fileapi google-chrome-app
如果能够在Stack Exchange上将图像粘贴到此处而不是干预文件对话框,那将非常方便。此处已实现了类似功能,但仅适用于Webkit浏览器。
我正在开发可以做到这一点的用户脚本。有趣的是,在Webkit浏览器中,我从未从剪贴板中获取文件(与原始图像数据不同),而在Firefox中却可以。
Firefox解决方案:
div.addEventListener('paste', function(event){
//I'm actually not sure what should event.originalEvent be. I copypasted this
var items = (event.clipboardData || event.originalEvent.clipboardData);
console.log("paste", items);
//Try to get a file and handle it as Blob/File
var files = items.items || items.files;
if(files.length>0) {
//Being lazy I just pick first file
var file = files[0];
//handle the File object
_this.processFile(file);
event.preventDefault();
event.cancelBubble = true;
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
在Chrome没有像Firefox一样好的文档(我的意思是MDN)之前,我试图检查正在发生的事情。我复制了一个文件,并将其粘贴到Google chrome(v39)中。这是我DataTransfer在控制台中获得的对象:

供参考,这是Firefox中的同一事件:

另外两个阵列,items …
fileapi ×10
javascript ×9
html5 ×6
file-upload ×2
cordova ×1
filereader ×1
firefox ×1
hash ×1
paste ×1
web-worker ×1