【发布时间】:2011-11-05 06:10:44
【问题描述】:
它可能与 Webfaction 配置有关(他们有 nginx 代理,我的应用是在 apache2+mod_wsgi 下运行的 webpy),因为它可以在我的 dev cherrypy 服务器中运行。
以下是我用于上传的 javascript 代码中的一些位:
/* Bind drop events */
$(this).bind({
"dragover": function(e){
var dt = e.originalEvent.dataTransfer;
if(!dt) return;
if($.browser.webkit) dt.dropEffect = 'copy';
$(this).addClass("active");
return false;
},
"dragleave": function(e){
$(this).removeClass("active")
},
"dragenter": function(e){return false;},
"drop": function(e){
var dt = e.originalEvent.dataTransfer;
if(!dt&&!dt.files) return;
$(this).removeClass("active")
var files = dt.files;
for (var i = 0; i < files.length; i++) {
upload(files[i]);
}
return false;
}
})
/* Upload function code cut down to the basic */
function upload(file) {
var xhr = new XMLHttpRequest();
var xhr_upload = xhr.upload;
xhr_upload.addEventListener("progress", function(e){
if( e.lengthComputable ) {
var p = Math.round(e.loaded * 100 / e.total );
if(e.loaded == e.total){
console.log( e );
}
}
}, false);
xhr_upload.addEventListener( "load", function( e ){}, false);
xhr_upload.addEventListener( "error", function( error ) { alert("error: " + error); }, false);
xhr.open( 'POST', url, true);
xhr.onreadystatechange = function ( e ) { };
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("Content-Type", file.type);
xhr.setRequestHeader("X-File-Name", encodeURIComponent(file.fileName));
xhr.setRequestHeader("X-File-Size", file.fileSize);
xhr.send(file);
}
如果我在进度事件中填充百分比值,那么在 Safari 中它会从 0% 变为 100%,然后从 50% 变为 100%,然后上传完成。 Chrome 和 Firefox 都可以。
e.loaded == e.total 每次上传都会到达两次,因为我在控制台日志中看到了这一点:
console log http://img824.imageshack.us/img824/4363/screenshot20110827at101.png
在第一个记录的事件中,totalSize 等于文件的大小,但在第二个中是两倍。
【问题讨论】:
-
了解 drop 事件的触发方式和位置可能会有所帮助。我想知道是否有两个 drop 事件因某种原因被触发。
-
你查看
files的内容了吗? -
@Barum,后端获取正确大小的正确文件,但文件似乎每次上传都会传输两次。
-
@Ryan,我已经用 drop 事件绑定摘录更新了问题。我不认为这是一个问题,因为在我的代码中,上传会为每个删除的文件创建
- 元素,而且我绝对不会看到同一个文件被删除两次。
-
hmm.. 也许这家伙是对的 - Safari/Windows 只是一个有缺陷的废话 ..smilingsouls.net/Blog/20110413023355.html
标签: javascript ajax upload safari webfaction