ich Ihre Frage ein wenig zu interpretieren .. werde ich zwei Annahmen:
1) Sie eine Datei hochladen möchten, ohne eine Form zu veröffentlichen und so Aktualisieren Sie die Seite, dh asynchroner Upload 2) Sie möchten in der Lage sein, den Picker mit einer beliebigen Schaltfläche zu starten (so können Sie es wie gewünscht gestalten)
Die Lösung Wenn Sie auf eine Schaltfläche klicken, wird eine Dateiauswahl gestartet. Mehrere Dateien können ausgewählt werden und sie werden asynchron auf dem Server veröffentlicht (AJAX).
<input type="file" name="attach" id="attach-input" multiple="" style="display:none" />
<button type="submit" name="attach" id="attach-button">Upload</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
var button = $('#attach-button');
var input = $('#attach-input');
// translates collection of files into a form
function BuildFormData(files) {
var data = new FormData();
for (var i = 0; i < files.length; i++) {
data.append(files[i].name, files[i]);
}
return data;
}
// posts the files to a given url
function PostData(url, data) {
$.ajax({
// method
type: 'POST',
// endpoint
url: url,
// next 2 lines required for using FormData with jQuery
contentType: false,
processData: false,
// FormData instance
data: data,
// success handler
success: function (result) {
alert('files uploaded successfully');
console.log(result);
}
});
}
// when the button is clicked..
button.on('click', function (e) {
// it launches the file picker
input.click();
});
// when the file picker changes..
input.on('change', function (e) {
// turn it into a form
var data = BuildFormData(e.target.files);
// post the form to the action method
PostData('/Index/Attach', data);
});
</script>
Die Aktion Methode, die ich in der asp.net MVC-Controller verwendet werden die Dateien in den Ordner App_Data der Anwendung speichern:
[HttpPost]
public void Attach()
{
foreach (string file in Request.Files)
{
HttpPostedFileBase fileContent = Request.Files[file];
Stream stream = fileContent.InputStream;
string fileName = Path.GetFileName(file);
string path = Path.Combine(Server.MapPath("~/App_Data"), fileName);
using(var fileStream = System.IO.File.Create(path))
{
stream.CopyTo(fileStream);
}
}
}
Hoffnung, die Sie in die richtige Richtung lenkt.
ist Ihre Frage sinnvoll. Bitte lesen Sie es einmal und formulieren Sie es um. – Aravind
Ok, ich möchte eine einzelne Schaltfläche auf meiner Seite, die den OpenFileDialog öffnet und dann, nachdem der Benutzer eine Datei auswählt, möchte ich in der Lage sein, die Datei in einem MVC-Controller zu verarbeiten. – user3159792
Sie möchten die Datei an den Controller übergeben, ohne ein Formular zu verwenden? Bitte klären Sie Ihre Frage – hdrdiab