Я занимаюсь регистрацией сотрудников, если есть изображение, которое пользователь может просмотреть на выбранном ими изображении. Поэтому моя проблема заключается в том, что когда я пытался просмотреть выбранный образ, имя файла в файловой загрузке пропало.
"save-14-copy.png" - это имя файла.
Итак, следующий шаг - предварительный просмотр изображения.
Таким образом, вы можете увидеть, что "save-14-copy.png" уже исчез после нажатия кнопки предварительного просмотра.
Как сохранить имя файла, чтобы я не получил ошибку при ее сохранении?
Код для дизайна:
<asp:Button runat="server" ID="Button1" Text="PREVIEW" CssClass="button-green" OnClick="Button1_Click"/>
Javascript:
<script type="text/javascript">
function ImagePreview(Imagepath) {
if (Imagepath.files && Imagepath.files[0]) {
var Filerdr = new FileReader();
Filerdr.onload = function (e) {
document.getElementById("<%= hfImage.ClientID %>").value = e.target.result;
}
Filerdr.readAsDataURL(Imagepath.files[0]);
}
}
</script>
Codebehind:
protected void Button1_Click(object sender, EventArgs e)
{
EmpImage.ImageUrl = hfImage.Value;
}
Кнопка "Предварительный просмотр" на самом деле вызывает сообщение на сервере. Теперь, как вы его настроили, кнопка предварительного просмотра будет более точно названа Upload.
Вы используете объект FileReader
, чтобы читать файл из локальной файловой системы пользователя и показывать его на изображении перед загрузкой. Все это должно происходить только в клиенте. Как только пользователь доволен выбранным изображением, он может загрузить изображение на сервер.
Вот очень простой пример, который должен вас начать.
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="preview" runat="server" ImageUrl="~/Images/NotSelectedYet.jpg" />
<br />
<asp:FileUpload ID="pictureOfMe" runat="server" />
<input type="button" value="Preview" onclick="Preview();" />
<br />
<asp:Button ID="Upload" runat="server" Text="Upload file to server" OnClick="Upload_Clicked" />
</div>
</form>
<script type="text/javascript">
function Preview() {
var fileInput = document.getElementById('<%= pictureOfMe.ClientID %>');
var filePreview = document.getElementById('<%= preview.ClientID %>');
var file = fileInput.files[0];
var imageType = /image.*/;
if (file.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function (e) {
filePreview.src = reader.result;
}
reader.readAsDataURL(file);
}
else {
alert('Not an image file!');
}
}
</script>
</body>
Здесь мы имеем изображение, показывающее изображение по умолчанию при первой загрузке. Затем у нас есть элемент управления загрузкой файлов, который позволяет пользователю выбрать изображение для загрузки. И у нас есть кнопка ввода html, которую пользователь нажимает для предварительного просмотра выбранного изображения. Когда эта кнопка нажата, она запускает код javascript, который использует FileReader
для загрузки файла, показывающего его на изображении. Обратите внимание, что кнопка предварительного просмотра не приведет к возврату сообщения на сервер.
У нас также есть кнопка сервера, которая будет размещать страницу (включая выбранную картинку) на сервере с объявленным обработчиком событий сервера.
public partial class TestImagePreviewAndUpload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Upload_Clicked(object sender, EventArgs e)
{
if(pictureOfMe.PostedFile.FileName != string.Empty) {
byte[] uploadedBytes = pictureOfMe.FileBytes;
//save uploaded picture here
}
}
}
Здесь, в методе Upload_Clicked
мы проверяем, был ли файл загружен и получает содержимое файла в виде byte[]
. Сохранение файла в соответствии с законом остается в виде упражнения...
Примечание. Пример javascript (с некоторыми изменениями) отсюда
я думаю, вы должны сохранить файл при предварительном просмотре и обработать имя файла там
protected void Button1_Click(object sender, EventArgs e)
{
hfImagename.Value = fuFile.PostedFile.FileName;
fuFile.PostedFile.SaveAs(@"C:\foo\" +fuFile.PostedFile.FileName);
}