【问题标题】:Change default text in input type="file"?更改输入类型 =“文件”中的默认文本?
【发布时间】:2011-07-05 13:17:55
【问题描述】:

当我们使用input="file" 时,我想更改按钮上的默认文本“Choose File”。

我该怎么做?正如您在图像中看到的那样,按钮位于文本的左侧。我怎样才能把它放在文本的右侧?

【问题讨论】:

标签: html file input default-value


【解决方案1】:

labelfor 属性用于input

<div>
  <label for="files" class="btn">Select Image</label>
  <input id="files" style="visibility:hidden;" type="file">
</div>

下面是获取上传文件名的代码


$("#files").change(function() {
  filename = this.files[0].name;
  console.log(filename);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    <label for="files" class="btn">Select Image</label>
    <input id="files" style="visibility:hidden;" type="file">
</div>

【讨论】:

  • display:none 可用于 INPUT,因此不会占用不需要的空间。
  • 谢谢。这非常有效,正是我想要的。
  • 在带有 Chrome、FF 和 Safari 的 Mac 上运行良好。如果它也在 IE 上这样做,那么这是设置文件输入按钮样式的最佳和最简单的选项。谢谢!
  • 效果很好,唯一的缺点是用户在选择时看不到已选择的文件的名称。
  • @Mike 更新帖子以获取文件名
【解决方案2】:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>

<body>
  <button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>
  <input type='file' id="getFile" style="display:none">
</body>

</html>

【讨论】:

    【解决方案3】:

    为此,必须使用display:none CSS 属性隐藏默认输入按钮,并添加一个新的按钮元素来替换它,这样我们就可以根据需要进行自定义。

    使用引导

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
     
    Optional text here 
    
    <label for="img" class="btn btn-info">Try me</label>
    <input type="file" id="img" style="display:none">

    使用 jQuery

    ​​>

    在这种情况下,添加到按钮元素的onclick 属性指示 JavaScript 在单击可见按钮时单击隐藏的默认输入按钮。

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    Optional text here 
    
    <button style="cursor:pointer" onclick="$('#input').click()">Click me</button>
    <input type="file" id="input" style="display:none">

    带有事件监听器的纯 JavaScript

    document.getElementById('btn').addEventListener('click', () => { 
      document.getElementById('input').click();
    })
    Optional text here 
    <button style="cursor:pointer" id="btn">Click me</button>
    <input type="file" id="input" style="display:none">

    【讨论】:

      【解决方案4】:

      下面是一个风格化的上传按钮示例,该按钮将读取图像、对其进行压缩并下载生成的图像。它的工作原理是隐藏实际的输入元素,然后我们通过一些技巧来制作它,以便当您单击我们的假文件上传器时,它会使用实际的输入元素弹出选择文件的窗口。通过使用这种方法,我们可以 100% 控制文件上传器的外观,因为我们使用自己的元素而不是设置文件上传菜单的样式。如果我们想这样做,它还可以让我们在未来轻松添加拖放功能。

      然后我实际上创建了关于这个文件上传按钮的a series of blog posts

      'use strict'
        
      var AMOUNT = 10
      var WIDTH = 600
      var HEIGHT = 400
      var canvas = document.getElementById('canvas')
      canvas.width = WIDTH
      canvas.height = HEIGHT
      
      //here's how I created the clickable area
      //user clicks the clickable area > we send a click event
      //to the file opener > the file opener clicks on the open
      //file button > the open file dialogue pops up
      
      function clickableAreaListener(e){
        let clickEvent = new CustomEvent("click",{"from":"fileOpenerHandler"});
        document.getElementById("fileOpener").dispatchEvent(clickEvent);
      }
      function fileOpenerListener(e) {
        document.getElementById("file-btn").click();
        e.preventDefault();
      }
      
      function fileSelectedListener(e){
          readFiles(e.target.files);
      }
      
      document.getElementById('file-btn').addEventListener('change', fileSelectedListener);
      document.getElementById("clickable-area").addEventListener('click', clickableAreaListener);
      document.getElementById("fileOpener").addEventListener("click", fileOpenerListener);
      
      function readFiles(files){
        files = [].slice.call(files); //turning files into a normal array
      
        for (var file of files){
          var reader = new FileReader();
      
          reader.onload = createOnLoadHandler(file);
          reader.onerror = fileErrorHandler;
          //there are also reader.onloadstart, reader.onprogress, and reader.onloadend handlers
      
          reader.readAsDataURL(file);
        }
      }
        
      function fileErrorHandler(e) {
        switch(e.target.error.code) {
          case e.target.error.NOT_FOUND_ERR:
            throw 'Image not found';
            break;
          case e.target.error.NOT_READABLE_ERR:
            throw 'Image is not readable';
            break;
          case e.target.error.ABORT_ERR:
            break;
          default:
            throw 'An error occurred while reading the Image';
        };
      }
      
      function createOnLoadHandler(file){
        console.log('reading ' + file.name + ' of type ' + file.type) //file.type will be either image/jpeg or image/png
        
        function onLoad(e){
          var data = e.target.result
          display(data);
          var compressedData = compressCanvas(AMOUNT)
          download(compressedData)
        }
        
        return onLoad
      }
        
      function display(data){
        
          var img = document.createElement('img');
          img.src = data;
        
          var context = canvas.getContext('2d')
          context.clearRect(0, 0, WIDTH, HEIGHT);
          context.drawImage(img, 0, 0, WIDTH, HEIGHT);
        }
      
      function compressCanvas(){
          return canvas.toDataURL('image/jpeg', AMOUNT / 100);
        }
      
      function download(data) {
      
          function b64toBlob(b64Data, contentType, sliceSize) {
              contentType = contentType || '';
              sliceSize = sliceSize || 512;
      
              var byteCharacters = atob(b64Data);
              var byteArrays = [];
      
              for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
                  var slice = byteCharacters.slice(offset, offset + sliceSize);
      
                  var byteNumbers = new Array(slice.length);
                  for (var i = 0; i < slice.length; i++) {
                      byteNumbers[i] = slice.charCodeAt(i);
                  }
      
                  var byteArray = new Uint8Array(byteNumbers);
      
                  byteArrays.push(byteArray);
              }
      
              var blob = new Blob(byteArrays, {type: contentType});
              return blob;
          }
          
          var chromeApp = Boolean(chrome && chrome.permissions)
          if (chromeApp){
          
            chrome.fileSystem.chooseEntry({type:'openDirectory'}, function(entry) {
              chrome.fileSystem.getWritableEntry(entry, function(entry) {
                entry.getFile('example.jpg', {create:true}, function(entry) {
                  entry.createWriter(function(writer){
                    writer.write(b64toBlob(data.slice(23), 'image/jpg'))
                  })
                })
              })
            })
          
          } else {
            let a = document.createElement("a");
            a.href = data;
            a.download = 'downloadExample.jpg'
            document.body.appendChild(a)
            a.click();
            window.URL.revokeObjectURL(a.href);
            a.remove()
        }
          
      }
      .fileInput {
        display: none;
        position: absolute;
        top: 0;
        right: 0;
        font-size: 100px;
      }
        
      #clickable-area{
        background: #ccc;
        width: 500px;
        display: flex;
        margin-bottom: 50px;
      }
        
      #clickable-area-text{
        margin: auto;
      }
      
      .yellow-button {
        cursor: pointer;
        color: white;
        background: #f1c40f;
        height: 30px;
        width: 120px;
        padding: 30px;
        font-size: 22px;
        text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
      }
      <div id="clickable-area">
        <a id='fileOpener'> </a>
        <input type="file" class="fileInput" id="file-btn" accept="image/*" multiple/>
        <div class="yellow-button"><span>Shrink Image</span>
        </div><p id="clickable-area-text">( you can click anywhere in here ) &nbsp;</p>
      </div>
        
      <canvas id="canvas"></canvas>

      堆栈溢出限制似乎阻止了代码 sn-p 实际压缩和下载文件。 exact same code here 表明完整的上传/压缩/下载过程确实按预期工作。

      【讨论】:

        【解决方案5】:

        使用 Bootstrap 你可以像下面的代码那样做。

        <!DOCTYPE html>
        <html lang="en">
        <head>
        
          <style>
            .btn-file {
              position: relative;
              overflow: hidden;
            }
        
            .btn-file input[type=file] {
              position: absolute;
              top: 0;
              right: 0;
              min-width: 100%;
              min-height: 100%;
              font-size: 100px;
              text-align: right;
              filter: alpha(opacity=0);
              opacity: 0;
              outline: none;
              background: white;
              cursor: inherit;
              display: block;
            }
        
          </style>
          <title>Bootstrap Example</title>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
          <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        </head>
        <body>
          <span class="btn btn-file">Upload image from here<input type="file">
        </body>
        </html>
        

        【讨论】:

        • 此代码不会将选择的文件打印回网页。
        【解决方案6】:

        诀窍是在点击文件输入时触发点击事件,并通过 CSS 管理默认输入文件的可见性。以下是您的操作方法:

        jQuery:

        $(function() {
          $("#labelfile").click(function() {
            $("#imageupl").trigger('click');
          });
        })
        

        css

        .file {
          position: absolute;
          clip: rect(0px, 0px, 0px, 0px);
          display: block;
        }
        
        .labelfile {
          color: #333;
          background-color: #fff;
          display: inline-block;
          margin-bottom: 0;
          font-weight: 400;
          text-align: center;
          vertical-align: middle;
          cursor: pointer;
          background-image: none;
          white-space: nowrap;
          padding: 6px 8px;
          font-size: 14px;
          line-height: 1.42857143;
          -webkit-user-select: none;
          -moz-user-select: none;
          -ms-user-select: none;
          user-select: none;
        }
        

        HTML 代码:

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <div>
          <input name="imageupl" type="file" id="imageupl" class="file" />
          <label class="labelfile" id="labelfile"><i class="icon-download-alt"></i> Browse File</label>
        </div>
        

        【讨论】:

          【解决方案7】:

          我构建了一个更容易做到这一点的脚本。

          例如:

          &lt;input data-com="fileBtn" placeholder="Select Image"&gt;

          基本上,我的脚本和这个link非常相似

          代码

          纯javascript,无需依赖

          <!-- bootstrap.min.css not necessary -->
          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/css/bootstrap.min.css">
          
          <input data-com="fileBtn" placeholder="Select Image"> <!-- com: components -->
          <input data-com="fileBtn" placeholder="Select File">
          <div class="mt-2">
          <input id="build-by-myself" placeholder="Select Video" accept="video/mp4, video/webm">
          <div>
          
          <script>
            // ? Test
            (()=>{
              window.onload = () =>{
                // FileButton.className ="btn btn-danger"
                FileButton.BuildAll() // auto build all data-com="fileBtn"
                
                // or you can specify the target that you wanted.
                new FileButton(document.getElementById("build-by-myself"), "btn btn-danger")
              }
            })()
          
            // ? script begin
            class FileButton {
              static className = "btn btn-primary"
              static BuildAll() {
                document.querySelectorAll(`input[data-com="fileBtn"]`).forEach(input=>{
                  new FileButton(input, FileButton.className)
                })
              }
              /**
               * @param {HTMLInputElement} input
               * @param {string} btnClsName
               * */
              constructor(input, btnClsName) {
                input.style.display = "none" // [display is better than visibility](https://stackoverflow.com/a/48495293/9935654)
                input.type = "file"
                const frag = document.createRange().createContextualFragment(`<button class="${btnClsName}">${input.placeholder}</button>`)
                const button = frag.querySelector(`button`)
          
                input.parentNode.insertBefore(frag, input)
          
                button.onclick = ()=>{
                  input.click()
                }
                input.addEventListener(`change`, (e)=>{
                  // create a textNode to show the file name.
                  const file = input.files[0]
                  if (file === undefined) {
                    return
                  }
                  const textNode = document.createTextNode(file.name)
                  if (button.textNode) { // create a new attribute to record previous data.
                    button.textNode.remove()
                  }
                  button.textNode = textNode
                  button.parentNode.insertBefore(textNode, input)
                })
              }
            }
          </script>

          参考

          【讨论】:

            【解决方案8】:

            $(document).ready(function () {
            	$('#choose-file').change(function () {
            		var i = $(this).prev('label').clone();
            		var file = $('#choose-file')[0].files[0].name;
            		$(this).prev('label').text(file);
            	}); 
             });
            .custom-file-upload{
              background: #f7f7f7; 
              padding: 8px;
              border: 1px solid #e3e3e3; 
              border-radius: 5px; 
              border: 1px solid #ccc; 
              display: inline-block;
              padding: 6px 12px;
              cursor: pointer;
            }
            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            can you try this
            
            <label for="choose-file" class="custom-file-upload" id="choose-file-label">
               Upload Document
            </label>
            <input name="uploadDocument" type="file" id="choose-file" 
               accept=".jpg,.jpeg,.pdf,doc,docx,application/msword,.png" style="display: none;" />

            【讨论】:

              【解决方案9】:

              这是如何使用引导程序完成的,只有你应该将原始输入放在某个地方...idk 在头部并删除
              如果你有它,因为它只是隐藏并且它占用空间:)

               <head> 
               <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
               </head>
               
               <label for="file" button type="file" name="image" class="btn btn-secondary">Secondary</button> </label>
                  
               <input type="file" id="file" name="image" value="Prebrskaj" style="visibility:hidden;">
               
               
               <footer>
               
               <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
              <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
              <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
               
               </footer>

              【讨论】:

                【解决方案10】:

                我的解决方案...

                HTML:

                <input type="file" id="uploadImages" style="display:none;" multiple>
                
                <input type="button" id="callUploadImages" value="Select">
                <input type="button" id="uploadImagesInfo" value="0 file(s)." disabled>
                <input type="button" id="uploadProductImages" value="Upload">
                

                jquery:

                $('#callUploadImages').click(function(){
                
                    $('#uploadImages').click();
                });
                
                $('#uploadImages').change(function(){
                
                    var uploadImages = $(this);
                    $('#uploadImagesInfo').val(uploadImages[0].files.length+" file(s).");
                });
                

                这只是邪恶的:D

                【讨论】:

                  【解决方案11】:

                  这应该可行:

                  input.*className*::-webkit-file-upload-button {
                    *style content..*
                  }
                  

                  【讨论】:

                    【解决方案12】:
                    <button class="styleClass" onclick="document.getElementById('getFile').click()">Your text here</button>
                    <input type='file' id="getFile" style="display:none">
                    

                    这仍然是迄今为止最好的

                    【讨论】:

                    • 同意,只是将隐形的人命名为“幽灵”看起来更酷
                    【解决方案13】:

                    每个浏览器都有自己的控件再现,因此您无法更改控件的文本或方向。

                    如果您想要/ 解决方案而不是Flash 或 解决方案,您可能想尝试一些“类型”的技巧。

                    http://www.quirksmode.org/dom/inputfile.html

                    http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

                    就个人而言,由于大多数用户坚持使用他们选择的浏览器,因此可能习惯于在默认版本中查看控件,如果他们看到不同的内容,他们可能会感到困惑(取决于您的用户类型)处理)。

                    【讨论】:

                      【解决方案14】:

                      您可以使用这种方法,即使输入大量文件也可以使用。

                      const fileBlocks = document.querySelectorAll('.file-block')
                      const buttons = document.querySelectorAll('.btn-select-file')
                      
                      ;[...buttons].forEach(function (btn) {
                        btn.onclick = function () {
                          btn.parentElement.querySelector('input[type="file"]').click()
                        }
                      })
                      
                      ;[...fileBlocks].forEach(function (block) {
                        block.querySelector('input[type="file"]').onchange = function () {
                          const filename = this.files[0].name
                      
                          block.querySelector('.btn-select-file').textContent = 'File selected: ' + filename
                        }
                      })
                      .btn-select-file {
                        border-radius: 20px;
                      }
                      
                      input[type="file"] {
                        display: none;
                      }
                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                      <div class="file-block">
                        <button class="btn-select-file">Select Image 1</button>
                        <input type="file">
                      </div>
                      <br>
                      <div class="file-block">
                        <button class="btn-select-file">Select Image 2</button>
                        <input type="file">
                      </div>

                      【讨论】:

                      • 我喜欢这种方法,但对我来说,选择的文件文本没有出现,不知道是什么问题。我是谷歌浏览器
                      【解决方案15】:

                      2017 年更新:

                      我已经研究过如何实现这一点。最好的解释/教程在这里: https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/

                      我会在这里写摘要以防它变得不可用。所以你应该有 HTML:

                      <input type="file" name="file" id="file" class="inputfile" />
                      <label for="file">Choose a file</label>
                      

                      然后用 CSS 隐藏输入:

                      .inputfile {
                      width: 0.1px;
                      height: 0.1px;
                      opacity: 0;
                      overflow: hidden;
                      position: absolute;
                      z-index: -1;}
                      

                      然后给标签设置样式:

                      .inputfile + label {
                      font-size: 1.25em;
                      font-weight: 700;
                      color: white;
                      background-color: black;
                      display: inline-block;
                      }
                      

                      然后可以选择添加JS来显示文件名:

                      var inputs = document.querySelectorAll( '.inputfile' );
                      Array.prototype.forEach.call( inputs, function( input )
                      {
                      var label    = input.nextElementSibling,
                          labelVal = label.innerHTML;
                      
                      input.addEventListener( 'change', function( e )
                      {
                          var fileName = '';
                          if( this.files && this.files.length > 1 )
                              fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
                          else
                              fileName = e.target.value.split( '\\' ).pop();
                      
                          if( fileName )
                              label.querySelector( 'span' ).innerHTML = fileName;
                          else
                              label.innerHTML = labelVal;
                      });
                      });
                      

                      不过真的只是看了教程下载了demo,真的很不错。

                      【讨论】:

                        【解决方案16】:

                        我想这就是你想要的:

                        <!DOCTYPE html>
                        <html>
                        
                        <head>
                          <meta charset="utf-8">
                          <meta name="viewport" content="width=device-width">
                          <title>JS Bin</title>
                        </head>
                        
                        <body>
                          <button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>
                          <input type='file' id="getFile" style="display:none">
                        </body>
                        
                        </html>

                        【讨论】:

                        • 目前为止最好的解决方案。
                        • 这也处理键盘导航。为了使其完美,请在隐藏文件输入上使用tabindex="-1" 以在跳格时跳过它。
                        【解决方案17】:

                        我会使用button 来触发input

                        <button onclick="document.getElementById('fileUpload').click()">Open from File...</button>
                        <input type="file" id="fileUpload" name="files" style="display:none" />
                        

                        又快又干净。

                        【讨论】:

                          【解决方案18】:

                          我制作了一个脚本并在 GitHub 上发布:get selectFile.js 易于使用,随意克隆。


                          HTML

                          <input type=file hidden id=choose name=choose>
                          <input type=button onClick=getFile.simulate() value=getFile>
                          <label id=selected>Nothing selected</label>
                          


                          JS

                          var getFile = new selectFile;
                          getFile.targets('choose','selected');
                          


                          演示

                          jsfiddle.net/Thielicious/4oxmsy49/

                          【讨论】:

                            【解决方案19】:

                            这可能对将来的某个人有所帮助,您可以根据需要为输入设置标签的样式,并在其中放置任何您想要的内容并隐藏输入,不显示任何内容。

                            它在带有 iOS 的 cordova 上完美运行

                            <link href="https://cdnjs.cloudflare.com/ajax/libs/ratchet/2.0.2/css/ratchet.css" rel="stylesheet"/>
                            <label for="imageUpload" class="btn btn-primary btn-block btn-outlined">Seleccionar imagenes</label>
                            <input type="file" id="imageUpload" accept="image/*" style="display: none">

                            【讨论】:

                              【解决方案20】:

                              好的,创建自定义输入文件的非常简单的纯 css 方式。

                              使用标签,但正如您从之前的答案中知道的那样,标签不会调用 onclick Firefox中的函数,可能是一个错误,但与以下无关。

                              <label for="file"  class="custom-file-input"><input type="file"  name="file" class="custom-file-input"></input></label>
                              

                              您所做的是设置标签的样式以使其看起来像您想要的样子

                                  .custom-file-input {
                                      color: transparent;/* This is to take away the browser text for file uploading*/
                                      /* Carry on with the style you want */
                                      background: url(../img/doc-o.png);
                                      background-size: 100%;
                                      position: absolute;
                                      width: 200px;
                                      height: 200px;
                                      cursor: pointer;
                                      top: 10%;
                                      right: 15%;
                                  }
                              

                              现在只需隐藏实际的输入按钮,但您不能将其设置为visability: hidden

                              所以通过设置opacity: 0; 使其不可见

                              input.custom-file-input {
                                  opacity: 0;
                                  position: absolute;/*set position to be exactly over your input*/
                                  left: 0;
                                  top: 0;
                              }
                              

                              现在您可能已经注意到,我的标签上的类与我的输入字段相同,那是因为我希望两者具有相同的样式,因此无论您单击标签的位置,实际上都是在单击在不可见的输入字段上。

                              【讨论】:

                                【解决方案21】:

                                这是不可能的。否则您可能需要使用 Silverlight 或 Flash 上传控件。

                                【讨论】:

                                • 哪一个是不可能的?更改文本或将按钮放在右侧或两者兼而有之?
                                • 我赞成这个,因为我认为反对这个答案是不公平的。更改原生文件输入按钮的文本基本上是不可能的。 “可能的解决方案”都是黑客或变通方法。
                                • @PeterLee - 黑客解决方案,有些甚至遵循 W3C 规范。
                                猜你喜欢
                                • 2016-09-09
                                • 2020-09-22
                                • 2023-04-03
                                • 2014-12-27
                                • 1970-01-01
                                • 2021-04-07
                                • 2014-04-18
                                • 1970-01-01
                                相关资源
                                最近更新 更多