1

我正在编写一个代码来一步浏览和上传文件。我有这个代码:

<input type="file" id="image" style="display: none;">
<input type="submit" name="upload" id="upload" value="upload"
  onclick="document.getElementById('image').click();">

此代码允许我选择文件并提交表单,但我想使用 $_FILE 属性,并且由于文件输入中没有名称字段,我无法访问文件信息。

所以我修改了我的代码以添加名称字段,如下所示

<input type="file" name="image" id="image" style="display: none;" />

<input type="submit" name="upload" id="upload" value="upload"
  onclick="document.getElementById('image').click();" />

现在,使用此代码,我仍然可以浏览文件,但未提交。所以简而言之,我无法使用这两种方法访问 $_FILE 。

任何建议我可以做些什么来继续前进。??

TIA

4

6 回答 6

1

要使所选图像在 PHP 中的 $_FILES 数组中可用,您需要为文件字段提供名称属性并将enctype表单的属性设置为,multipart/form-data以便浏览器正确发布。

<form action="some.php" method="post" enctype="multipart/form-data">
 <input type="file" id="image" name="image">
 <input type="button" value="select image" id="button">
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

为了能够仍然.click()在文件输入上使用该方法,它必须没有从文档中取出(即:display: none不起作用),因此您可以使用:

​input[type=file] {
 position: absolute; height: 0; width: 0; /* should be totally squashed */
 visibility: hidden; /* just in case */
}​

然后您可以使用 JavaScript 打开选择对话框并提交表单

$('#button').click(function() {
  $('#image')[0].click();
});​​​​
$('#image').change(function() {
  $('form').submit();
});

(这里假设您的页面上有 jQuery,这是一个工作示例http://jsfiddle.net/steveukx/V4yE3/

于 2012-04-18T07:10:56.307 回答
0

据我了解,您只想a)隐藏浏览器特定的文件浏览控件并提供您自己的样式按钮,b)同时选择和上传文件(例如,在文件浏览对话框关闭时上传您的照片)。

在这种情况下,您需要这样的东西:

<form name="myForm" method="POST">
    <input type="file" name="image" id="image" 
        style="position: absolute; left: -1000px;"
        onchange="myForm.submit();" />
    <input type="button" name="upload" id="upload" value="upload"
        onclick="document.getElementById('image').click();" />
</form>

在 Chrome 中工作(不要隐藏文件输入,而是将其移到页面外)。如果其他浏览器有任何问题,我建议使用 jQuery。

高温高压

于 2012-04-18T07:08:26.383 回答
0
<input type="file" id="image" onchange="yourForm.submit();">
于 2012-04-18T09:04:21.103 回答
0

虽然我在这里不支持您的方法(它不会将标记与行为分开),但您可以尝试return trueonclick.

于 2012-04-18T05:03:48.293 回答
0

这段代码不能跨浏览器工作。在 chrome 上,您不能调用click()隐藏input[type=file]元素。

即使您将其切换为可见,将其click()放入onclickoronsubmit处理程序也将不起作用 - 表单将不会与新文件值一起提交。这是一项安全功能。浏览器不希望您这样做。

Flash 可以为所欲为。查看 YUI Uploader 组件:http: //developer.yahoo.com/yui/uploader/

于 2012-04-18T05:07:31.473 回答
0

如果您想在不重新加载页面的情况下上传文件,请使用AJAX 文件上传 jQuery 插件在某些地方上传文件,并将响应传递给回调,仅此而已。

It does not depend on specific HTML, just give it a <input type="file">
It does not require your server to respond in any particular way
It does not matter how many files you use, or where they are on the page

-- 少用 --

$('#one-specific-file').ajaxfileupload({
  'action': '/upload.php'
});

——或多于——

$('input[type="file"]').ajaxfileupload({
  'action': '/upload.php',
  'params': {
    'extra': 'info'
  },
  'onComplete': function(response) {
    console.log('custom handler for file:');
    alert(JSON.stringify(response));
  },
  'onStart': function() {
    if(weWantedTo) return false; // cancels upload
  },
  'onCancel': function() {
    console.log('no file selected');
  }
});
于 2012-04-18T05:34:33.663 回答