use*_*509 142 javascript php ajax upload jquery
我想在我的Intranet页面上实现一个简单的文件上传,尽可能小的设置.
这是我的HTML部分:
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
Run Code Online (Sandbox Code Playgroud)
这是我的JS jquery脚本:
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
Run Code Online (Sandbox Code Playgroud)
在网站的根目录中有一个名为"uploads"的文件夹,具有"users"和"IIS_users"的更改权限.
当我选择具有文件格式的文件并按下上传按钮时,第一个警报返回"[object FormData]".第二个警报没有被调用,"uploads"文件夹也是空的!?
有人可以帮助我找出错误吗?
下一步应该是,用服务器端生成的名称重命名文件.也许有人可以给我一个解决方案.
blo*_*les 263
您需要在服务器上运行的脚本将文件移动到uploads目录.jQuery ajax
方法(在浏览器中运行)将表单数据发送到服务器,然后服务器上的脚本处理上载.这是使用PHP的示例.
您的HTML很好,但更新您的JS jQuery脚本如下所示:
$('#upload').on('click', function() {
var file_data = $('#sortpicture').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
alert(form_data);
$.ajax({
url: 'upload.php', // point to server-side PHP script
dataType: 'text', // what to expect back from the PHP script, if anything
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
alert(php_script_response); // display response from the PHP script, if any
}
});
});
Run Code Online (Sandbox Code Playgroud)
现在,对于服务器端脚本,在这种情况下使用PHP.
upload.php:在服务器上运行并将文件定向到uploads目录的PHP脚本:
<?php
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
}
?>
Run Code Online (Sandbox Code Playgroud)
另外,关于目标目录的一些事情:
还有一点关于move_uploaded_file
在upload.php脚本中使用的PHP函数:
move_uploaded_file(
// this is where the file is temporarily stored on the server when uploaded
// do not change this
$_FILES['file']['tmp_name'],
// this is where you want to put the file and what you want to name it
// in this case we are putting in a directory called "uploads"
// and giving it the original filename
'uploads/' . $_FILES['file']['name']
);
Run Code Online (Sandbox Code Playgroud)
$_FILES['file']['name']
是上传文件的名称.你不必使用它.您可以为文件指定所需的任何名称(服务器文件系统兼容):
move_uploaded_file(
$_FILES['file']['tmp_name'],
'uploads/my_new_filename.whatever'
);
Run Code Online (Sandbox Code Playgroud)
最后,请注意您的PHP upload_max_filesize
和post_max_size
配置值,并确保您的测试文件不超过.这里有一些帮助您如何检查PHP配置以及如何设置最大文件大小和发布设置.
**1. index.php**
<body>
<span id="msg" style="color:red"></span><br/>
<input type="file" id="photo"><br/>
<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(document).on('change','#photo',function(){
var property = document.getElementById('photo').files[0];
var image_name = property.name;
var image_extension = image_name.split('.').pop().toLowerCase();
if(jQuery.inArray(image_extension,['gif','jpg','jpeg','']) == -1){
alert("Invalid image file");
}
var form_data = new FormData();
form_data.append("file",property);
$.ajax({
url:'upload.php',
method:'POST',
data:form_data,
contentType:false,
cache:false,
processData:false,
beforeSend:function(){
$('#msg').html('Loading......');
},
success:function(data){
console.log(data);
$('#msg').html(data);
}
});
});
});
</script>
</body>
**2.upload.php**
<?php
if($_FILES['file']['name'] != ''){
$test = explode('.', $_FILES['file']['name']);
$extension = end($test);
$name = rand(100,999).'.'.$extension;
$location = 'uploads/'.$name;
move_uploaded_file($_FILES['file']['tmp_name'], $location);
echo '<img src="'.$location.'" height="100" width="100" />';
}
Run Code Online (Sandbox Code Playgroud)
使用纯js
async function saveFile()
{
let formData = new FormData();
formData.append("file", sortpicture.files[0]);
await fetch('/uploads', {method: "POST", body: formData});
alert('works');
}
Run Code Online (Sandbox Code Playgroud)
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload" onclick="saveFile()">Upload</button>
<br>Before click upload look on chrome>console>network (in this snipped we will see 404)
Run Code Online (Sandbox Code Playgroud)
文件名会自动包含在请求中,并且服务器可以读取它,“内容类型”会自动设置为“multipart/form-data”。这是更成熟的示例,包含错误处理和附加 json 发送
async function saveFile(inp)
{
let user = { name:'john', age:34 };
let formData = new FormData();
let photo = inp.files[0];
formData.append("photo", photo);
formData.append("user", JSON.stringify(user));
try {
let r = await fetch('/upload/image', {method: "POST", body: formData});
console.log('HTTP response code:',r.status);
alert('success');
} catch(e) {
console.log('Huston we have problem...:', e);
}
}
Run Code Online (Sandbox Code Playgroud)
<input type="file" onchange="saveFile(this)" >
<br><br>
Before selecting the file Open chrome console > network tab to see the request details.
<br><br>
<small>Because in this example we send request to https://stacksnippets.net/upload/image the response code will be 404 ofcourse...</small>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
324342 次 |
最近记录: |