是的,出於安全原因,input [type = file]是隻讀的。我剛剛通過將輸入[type = file]轉換爲輸入[type = hidden]並將該值設置爲圖像的base64編碼URI來解決了類似問題。
(順便說一句這與回形針https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/io_adapters/data_uri_adapter.rb自動工作)
這裏是我的jQuery代碼:
$(function() {
function renderPreviewImageFromFile(e,file) {
file = file || $(this).prop('files')[0];
if(file) {
var img = $(this).parents('li').find('img.preview');
var reader = new FileReader();
reader.onload = function(e) {
img.attr('src', e.target.result);
}
reader.readAsDataURL(file);
return img.attr('src');
}
}
$("ul.images-list")
.on('change','input.file',renderPreviewImageFromFile);
jQuery.event.props.push("dataTransfer");
$('.file-drop')
.on('dragover dragenter', function(e) {
$(this).addClass('hover');
e.preventDefault();
e.stopPropagation();
}).on('dragleave dragexit', function(e) {
$(this).removeClass('hover');
e.preventDefault();
e.stopPropagation();
}).on('drop', function(e) {
$(this).removeClass('hover').find('span').remove();
e.preventDefault();
e.stopPropagation();
// change input into hidden field
file = e.dataTransfer.files[0];
input = $(this).parents('li').find('input.file');
value = renderPreviewImageFromFile.apply(input, [null, file]);
input.attr('type','hidden').val(value).parents('div.input').hide();
});
});
不能以編程方式更新文件輸入字段的值。是否有任何理由不能簡單地通過XHR發送文件和關聯的表單域(在哪裏支持)? –
我認爲HTML5支持http://www.sitepoint.com/html5-file-drag-and-drop/ –
我懷疑無法以編程方式填充字段。將不得不重新思考這個方法。乾杯 –