Lefteris Gkinis Ответов: 1

Проблема с " saveas` в javascript


My code in `aspx` file is: <br>

    <input type="file" name="files" id="file" />
    <input type="submit" value="ActionResult" onclick="UpLoad(file)"  />

And my javascript is:

    <script type="text/javascript">
	function UpLoad(file) {
	    var gfile = file.files[0];
	    var gfileSize = gfile.size;
	    var gfileName = gfile.name;
	    var gfileType = gfile.type;
        if (gfileSize > 0) {
	        var x = ('<%=HttpUtility.JavaScriptStringEncode(Server.MapPath("~/App_Data/FileUpload"))%>');
	        var gpath = x + String.fromCharCode(92) + gfileName;
	        gfile.SaveAs(gpath);
	    };         
    };
    </script>

But `SaveAs` throws an error

> 0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'SaveAs'


Что я уже пробовал:

Я использую эти строки в своем коде aspx
<input type="file"  name="file1" id="file1" />
  <input type="button" value="Αποστολή αρχείου" onclick="uploadFile()"/><br />
  <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
  <h3 id="status"></h3>
  <p id="loaded_n_total"></p>


И я также использую этот " сценарий`
<script type="text/javascript">
function _(el){
	return document.getElementById(el);
}
function uploadFile(){
	var file = _("file1").files[0];
	// alert(file.name+" | "+file.size+" | "+file.type);
	var formdata = new FormData();
	formdata.append("file1", file);
	var ajax = new XMLHttpRequest();
	ajax.upload.addEventListener("progress", progressHandler, false);
	ajax.addEventListener("load", completeHandler, false);
	ajax.addEventListener("error", errorHandler, false);
	ajax.addEventListener("abort", abortHandler, false);
	ajax.open("POST","http://www.fileupload.ekkeross.com");
	ajax.send(formdata);
}
function progressHandler(event){
	_("loaded_n_total").innerHTML = "Uploaded "+event.loaded+" bytes of "+event.total;
	var percent = (event.loaded / event.total) * 100;
	_("progressBar").value = Math.round(percent);
	_("status").innerHTML = Math.round(percent)+"% uploaded... please wait";
}
function completeHandler(event){
	_("status").innerHTML = event.target.responseText;
	_("progressBar").value = 0;
}
function errorHandler(event){
	_("status").innerHTML =  "Upload Failed  " ;
}
function abortHandler(event){
	_("status").innerHTML = "Upload Aborted";
}
</script>


Он отлично работает, если я хочу загрузить свою текущую страницу.
Но файл изображения, который я выбираю, не загружается.
Кроме того я должен сказать следующее:
Текущая страница не сохраняется в Каталоге, но она появляется в браузере.
Когда я пытаюсь поместить любой (легальный) каталог, он возвращает мне ошибку. который говорит::
"Каталог Не Найден"

MadMyche

Вы пытаетесь загрузить его на сервер или сохранить на клиентской машине (где он уже находится)?

1 Ответов

Рейтинг:
11

F-ES Sitecore

Вы не можете использовать javascript для сохранения файлов в файловой системе. Вы также путаете серверный код и клиентский код. Код между <% .. %> запускается на сервере, поэтому генерирует путь на сервере, затем javascript выполняется на клиенте, так что путь не существует на клиенте. Эти вещи менее очевидны, когда вы разрабатываете на своей локальной машине, поскольку клиент и сервер-это одна и та же машина.

Google для того, чтобы узнать, как загрузить файл асинхронно, и вы найдете код, использующий подход, который будет работать.


jaket-cp

Согласен +5
Просто небольшой момент - если ОП хочет сохранить клиентскую сторону, они могут использовать следующее
https://github.com/eligrey/FileSaver.js/

Lefteris Gkinis

Пожалуйста, посмотрите на мое ревю в этом вопросе. И посмотрите, где, возможно, может быть неправильная линия.