gpt4 book ai didi

javascript - php 和 javascript 在发布到本地服务器时无法将文件发布到远程服务器

转载 作者:行者123 更新时间:2023-12-03 04:36:09 24 4
gpt4 key购买 nike

我确实有以下页面,其中一个正在进行拖放操作,另一页用于写入文件。如果拖放是本地写入,没有问题,如果是远程写入,则不起作用。

 <!DOCTYPE html>
<html>
<head>
<title> BETA APP HOME PAGE </title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<link rel="stylesheet" href="CSS/style.css">
</head>
<body>
<ul>
<li><a class="active" href='demo_upload.php'>demo upload</a></li>
</ul>

<div style="margin-left:15%;padding:1px 16px;height:1000px;">
<a id="topright" href="#" title="RaspBerry Pi"></a>
<h1> DEMO USING FILE UPLOAD</h1>
<p></p>


<?php
if (isset($_POST['STARTSCRIPT']))
{
$command = escapeshellcmd('sudo python AppPy/cgi-bin/test.py');
$output = shell_exec($command);
echo("on");
echo $output;
}
if (isset($_POST['STOPSCRIPT']))
{
shell_exec("sudo python AppPy/cgi-bin/test.py");
echo("Off");
}
?>

<form method="post">
<button name="STARTSCRIPT">START SCRIPT</button>&nbsp;
<button name="STOPSCRIPT">STOP SCRIPT</button><br><br>
</form>

<div id="dragandrophandler">Drag & Drop Files Here </div>
<br><br>
<div id="status1"></div>
<script>
function sendFileToServer(formData,status)
{
var uploadURL ="http://192.168.56.153/WEBAPP/upload.php"; //Upload URL
var extraData ={}; //Extra Data.
var jqXHR=$.ajax({
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
xhrobj.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
//Set progress
status.setProgress(percent);
}, false);
}
return xhrobj;
},
url: uploadURL,
type: "POST",
contentType:false,
processData: false,
cache: false,
data: formData,
success: function(data){
status.setProgress(100);

//$("#status1").append("File upload Done<br>");
}
});

status.setAbort(jqXHR);
}

var rowCount=0;
function createStatusbar(obj)
{
rowCount++;
var row="odd";
if(rowCount %2 ==0) row ="even";
this.statusbar = $("<div class='statusbar "+row+"'></div>");
this.filename = $("<div class='filename'></div>").appendTo(this.statusbar);
this.size = $("<div class='filesize'></div>").appendTo(this.statusbar);
this.progressBar = $("<div class='progressBar'><div></div></div>").appendTo(this.statusbar);
this.abort = $("<div class='abort'>Abort</div>").appendTo(this.statusbar);
obj.after(this.statusbar);

this.setFileNameSize = function(name,size)
{
var sizeStr="";
var sizeKB = size/1024;
if(parseInt(sizeKB) > 1024)
{
var sizeMB = sizeKB/1024;
sizeStr = sizeMB.toFixed(2)+" MB";
}
else
{
sizeStr = sizeKB.toFixed(2)+" KB";
}

this.filename.html(name);
this.size.html(sizeStr);
}
this.setProgress = function(progress)
{
var progressBarWidth =progress*this.progressBar.width()/ 100;
this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% ");
if(parseInt(progress) >= 100)
{
this.abort.hide();
}
}
this.setAbort = function(jqxhr)
{
var sb = this.statusbar;
this.abort.click(function()
{
jqxhr.abort();
sb.hide();
});
}
}
function handleFileUpload(files,obj)
{
for (var i = 0; i < files.length; i++)
{
var fd = new FormData();
fd.append('file', files[i]);

var status = new createStatusbar(obj); //Using this we can set progress.
status.setFileNameSize(files[i].name,files[i].size);
sendFileToServer(fd,status);

}
}
$(document).ready(function()
{
var obj = $("#dragandrophandler");
obj.on('dragenter', function (e)
{
e.stopPropagation();
e.preventDefault();
$(this).css('border', '2px solid #0B85A1');
});
obj.on('dragover', function (e)
{
e.stopPropagation();
e.preventDefault();
});
obj.on('drop', function (e)
{

$(this).css('border', '2px dotted #0B85A1');
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;

//We need to send dropped files to Server
handleFileUpload(files,obj);
});
$(document).on('dragenter', function (e)
{
e.stopPropagation();
e.preventDefault();
});
$(document).on('dragover', function (e)
{
e.stopPropagation();
e.preventDefault();
obj.css('border', '2px dotted #0B85A1');
});
$(document).on('drop', function (e)
{
e.stopPropagation();
e.preventDefault();
});

});


</script>


</div>
</div>
<div style="margin-left:15%;padding:1px 16px;height:10px;">

</div>
</body>
</html>

我的问题是当我指定当前服务器时:

 var uploadURL ="http://192.168.56.153/WEBAPP/upload.php"

它确实适用于此:

 chmod -R 0777 /var/www/html/WEBAPP/

这仅用于测试(为了解决权限问题),我从本地服务器的 apache 访问日志中得到此响应:

 192.168.56.1 - - [08/Apr/2017:14:07:44 +0200] "POST /WEBAPP/upload.php HTTP/1.1" 200 203 "http://192.168.56.153/WEBAPP/demo_upload.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

我的文件正在上传。

但是当我将其更改为远程目的地时:

 var uploadURL ="http://192.168.56.154/WEBAPP/upload.php"

我在远程服务器 apache 访问日志中收到此消息:

 192.168.56.1 - - [08/Apr/2017:13:44:13 +0200] "OPTIONS /WEBAPP/upload.php HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

没有上传文件。

无论哪种情况,upload.php 文件都是相同的:

 <?php

$ds = DIRECTORY_SEPARATOR; //1

$storeFolder = 'uploads'; //2

if (!empty($_FILES)) {

$tempFile = $_FILES['file']['tmp_name']; //3

$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4

$targetFile = $targetPath. $_FILES['file']['name']; //5

move_uploaded_file($tempFile,$targetFile); //6

}


?>

最佳答案

由于 CORS,您获得了 OPTIONS 类型的请求。加载 JavaScript 脚本的域必须与请求的域相同。跨域请求是被禁止的,这就是为什么它们经常被转换为 OPTIONS 请求。

但是,您可以通过设置响应 header Access-Control-Allow-Origin: * 来允许跨域请求。请参阅HTTP access control (CORS)了解详情。

关于javascript - php 和 javascript 在发布到本地服务器时无法将文件发布到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com