Files
shiny/reference/fileInput.html
2025-06-25 21:31:34 +00:00

237 lines
16 KiB
HTML

<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>File Upload Control — fileInput • shiny</title><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css"><script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet"><script src="../pkgdown.js"></script><meta property="og:title" content="File Upload Control — fileInput"><meta property="og:description" content="Create a file upload control that can be used to upload one or more files."><meta property="og:image" content="/logo.png"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--></head><body data-spy="scroll" data-target="#toc">
<div class="container template-reference-topic">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">shiny</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">1.11.0</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav"><li>
<a href="../reference/index.html">Reference</a>
</li>
<li>
<a href="../news/index.html">Changelog</a>
</li>
</ul><ul class="nav navbar-nav navbar-right"><li>
<a href="https://github.com/rstudio/shiny/" class="external-link">
<span class="fab fa-github fa-lg"></span>
</a>
</li>
</ul></div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
</header><div class="row">
<div class="col-md-9 contents">
<div class="page-header">
<h1>File Upload Control</h1>
<small class="dont-index">Source: <a href="https://github.com/rstudio/shiny/blob/main/R/input-file.R" class="external-link"><code>R/input-file.R</code></a></small>
<div class="hidden name"><code>fileInput.Rd</code></div>
</div>
<div class="ref-description">
<p>Create a file upload control that can be used to upload one or more files.</p>
</div>
<div id="ref-usage">
<div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">fileInput</span><span class="op">(</span></span>
<span> <span class="va">inputId</span>,</span>
<span> <span class="va">label</span>,</span>
<span> multiple <span class="op">=</span> <span class="cn">FALSE</span>,</span>
<span> accept <span class="op">=</span> <span class="cn">NULL</span>,</span>
<span> width <span class="op">=</span> <span class="cn">NULL</span>,</span>
<span> buttonLabel <span class="op">=</span> <span class="st">"Browse..."</span>,</span>
<span> placeholder <span class="op">=</span> <span class="st">"No file selected"</span>,</span>
<span> capture <span class="op">=</span> <span class="cn">NULL</span></span>
<span><span class="op">)</span></span></code></pre></div>
</div>
<div id="arguments">
<h2>Arguments</h2>
<dl><dt id="arg-inputid">inputId<a class="anchor" aria-label="anchor" href="#arg-inputid"></a></dt>
<dd><p>The <code>input</code> slot that will be used to access the value.</p></dd>
<dt id="arg-label">label<a class="anchor" aria-label="anchor" href="#arg-label"></a></dt>
<dd><p>Display label for the control, or <code>NULL</code> for no label.</p></dd>
<dt id="arg-multiple">multiple<a class="anchor" aria-label="anchor" href="#arg-multiple"></a></dt>
<dd><p>Whether the user should be allowed to select and upload
multiple files at once. <strong>Does not work on older browsers, including
Internet Explorer 9 and earlier.</strong></p></dd>
<dt id="arg-accept">accept<a class="anchor" aria-label="anchor" href="#arg-accept"></a></dt>
<dd><p>A character vector of "unique file type specifiers" which gives
the browser a hint as to the type of file the server expects. Many browsers
use this prevent the user from selecting an invalid file.</p>
<p>A unique file type specifier can be:</p><ul><li><p>A case insensitive extension like <code>.csv</code> or <code>.rds</code>.</p></li>
<li><p>A valid MIME type, like <code>text/plain</code> or <code>application/pdf</code></p></li>
<li><p>One of <code>audio/*</code>, <code>video/*</code>, or <code>image/*</code> meaning any audio, video,
or image type, respectively.</p></li>
</ul></dd>
<dt id="arg-width">width<a class="anchor" aria-label="anchor" href="#arg-width"></a></dt>
<dd><p>The width of the input, e.g. <code>'400px'</code>, or <code>'100%'</code>;
see <code><a href="https://rstudio.github.io/htmltools/reference/validateCssUnit.html" class="external-link">validateCssUnit()</a></code>.</p></dd>
<dt id="arg-buttonlabel">buttonLabel<a class="anchor" aria-label="anchor" href="#arg-buttonlabel"></a></dt>
<dd><p>The label used on the button. Can be text or an HTML tag
object.</p></dd>
<dt id="arg-placeholder">placeholder<a class="anchor" aria-label="anchor" href="#arg-placeholder"></a></dt>
<dd><p>The text to show before a file has been uploaded.</p></dd>
<dt id="arg-capture">capture<a class="anchor" aria-label="anchor" href="#arg-capture"></a></dt>
<dd><p>What source to use for capturing image, audio or video data.
This attribute facilitates user access to a device's media capture
mechanism, such as a camera, or microphone, from within a file upload
control.</p>
<p>A value of <code>user</code> indicates that the user-facing camera and/or microphone
should be used. A value of <code>environment</code> specifies that the outward-facing
camera and/or microphone should be used.</p>
<p>By default on most phones, this will accept still photos or video. For
still photos only, also use <code>accept="image/*"</code>. For video only, use
<code>accept="video/*"</code>.</p></dd>
</dl></div>
<div id="details">
<h2>Details</h2>
<p>Whenever a file upload completes, the corresponding input variable is set to
a dataframe. See the <code>Server value</code> section.</p>
<p>Each time files are uploaded, they are written to a new random subdirectory
inside of R's process-level temporary directory. The Shiny user session keeps
track of all uploads in the session, and when the session ends, Shiny deletes
all of the subdirectories where files where uploaded to.</p>
</div>
<div id="server-value">
<h2>Server value</h2>
<p>A <code>data.frame</code> that contains one row for each selected file, and following
columns:</p><dl><dt><code>name</code></dt>
<dd><p>The filename provided by the web browser. This is
<strong>not</strong> the path to read to get at the actual data that was uploaded
(see
<code>datapath</code> column).</p></dd>
<dt><code>size</code></dt>
<dd><p>The size of the uploaded data, in
bytes.</p></dd>
<dt><code>type</code></dt>
<dd><p>The MIME type reported by the browser (for example,
<code>text/plain</code>), or empty string if the browser didn't know.</p></dd>
<dt><code>datapath</code></dt>
<dd><p>The path to a temp file that contains the data that was
uploaded. This file may be deleted if the user performs another upload
operation.</p></dd>
</dl></div>
<div id="see-also">
<h2>See also</h2>
<div class="dont-index"><p>Other input elements:
<code><a href="actionButton.html">actionButton</a>()</code>,
<code><a href="checkboxGroupInput.html">checkboxGroupInput</a>()</code>,
<code><a href="checkboxInput.html">checkboxInput</a>()</code>,
<code><a href="dateInput.html">dateInput</a>()</code>,
<code><a href="dateRangeInput.html">dateRangeInput</a>()</code>,
<code><a href="numericInput.html">numericInput</a>()</code>,
<code><a href="passwordInput.html">passwordInput</a>()</code>,
<code><a href="radioButtons.html">radioButtons</a>()</code>,
<code><a href="selectInput.html">selectInput</a>()</code>,
<code><a href="sliderInput.html">sliderInput</a>()</code>,
<code><a href="submitButton.html">submitButton</a>()</code>,
<code><a href="textAreaInput.html">textAreaInput</a>()</code>,
<code><a href="textInput.html">textInput</a>()</code>,
<code><a href="varSelectInput.html">varSelectInput</a>()</code></p></div>
</div>
<div id="ref-examples">
<h2>Examples</h2>
<div class="sourceCode"><pre class="sourceCode r"><code><span class="r-in"><span><span class="co">## Only run examples in interactive R sessions</span></span></span>
<span class="r-in"><span><span class="kw">if</span> <span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/interactive.html" class="external-link">interactive</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="op">{</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="va">ui</span> <span class="op">&lt;-</span> <span class="fu"><a href="fluidPage.html">fluidPage</a></span><span class="op">(</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarLayout</a></span><span class="op">(</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarPanel</a></span><span class="op">(</span></span></span>
<span class="r-in"><span> <span class="fu">fileInput</span><span class="op">(</span><span class="st">"file1"</span>, <span class="st">"Choose CSV File"</span>, accept <span class="op">=</span> <span class="st">".csv"</span><span class="op">)</span>,</span></span>
<span class="r-in"><span> <span class="fu"><a href="checkboxInput.html">checkboxInput</a></span><span class="op">(</span><span class="st">"header"</span>, <span class="st">"Header"</span>, <span class="cn">TRUE</span><span class="op">)</span></span></span>
<span class="r-in"><span> <span class="op">)</span>,</span></span>
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">mainPanel</a></span><span class="op">(</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="renderTable.html">tableOutput</a></span><span class="op">(</span><span class="st">"contents"</span><span class="op">)</span></span></span>
<span class="r-in"><span> <span class="op">)</span></span></span>
<span class="r-in"><span> <span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="va">server</span> <span class="op">&lt;-</span> <span class="kw">function</span><span class="op">(</span><span class="va">input</span>, <span class="va">output</span><span class="op">)</span> <span class="op">{</span></span></span>
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">contents</span> <span class="op">&lt;-</span> <span class="fu"><a href="renderTable.html">renderTable</a></span><span class="op">(</span><span class="op">{</span></span></span>
<span class="r-in"><span> <span class="va">file</span> <span class="op">&lt;-</span> <span class="va">input</span><span class="op">$</span><span class="va">file1</span></span></span>
<span class="r-in"><span> <span class="va">ext</span> <span class="op">&lt;-</span> <span class="fu">tools</span><span class="fu">::</span><span class="fu"><a href="https://rdrr.io/r/tools/fileutils.html" class="external-link">file_ext</a></span><span class="op">(</span><span class="va">file</span><span class="op">$</span><span class="va">datapath</span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span> <span class="fu"><a href="req.html">req</a></span><span class="op">(</span><span class="va">file</span><span class="op">)</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="validate.html">validate</a></span><span class="op">(</span><span class="fu"><a href="validate.html">need</a></span><span class="op">(</span><span class="va">ext</span> <span class="op">==</span> <span class="st">"csv"</span>, <span class="st">"Please upload a csv file"</span><span class="op">)</span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/utils/read.table.html" class="external-link">read.csv</a></span><span class="op">(</span><span class="va">file</span><span class="op">$</span><span class="va">datapath</span>, header <span class="op">=</span> <span class="va">input</span><span class="op">$</span><span class="va">header</span><span class="op">)</span></span></span>
<span class="r-in"><span> <span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="fu"><a href="shinyApp.html">shinyApp</a></span><span class="op">(</span><span class="va">ui</span>, <span class="va">server</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span></span></span>
<span class="r-in"><span></span></span>
</code></pre></div>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
<nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
</nav></div>
</div>
<footer><div class="copyright">
<p></p><p>Developed by Winston Chang, Joe Cheng, JJ Allaire, Carson Sievert, Barret Schloerke, Yihui Xie, Jeff Allen, Jonathan McPherson, Alan Dipert, Barbara Borges, Posit Software, PBC.</p>
</div>
<div class="pkgdown">
<p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.3.</p>
</div>
</footer></div>
</body></html>