php plupload上传失败,php – Laravel Plupload上传到S3的预检反应无效 – CORS

我正在测试在Nginx服务器上的上传到S3的上传.

整个项目都是基于Laravel的.

问题是当我开始上传时,Chrome的控制台说:

XMLHttpRequest cannot load http://BUCKET.s3.amazonaws.com/. Response for preflight is invalid (redirect)

我已经尝试使用PHP标头来启用CORS,但仍然出现错误.

当前上传脚本:

$bucket = 'BUCKET';

$accessKeyId = '***************';

$secret = '********************************************';

$policy = base64_encode(json_encode(array(

'expiration' => date('Y-m-d\TH:i:s.000\Z', strtotime('+1 day')),

'conditions' => array(

array('bucket' => $bucket),

array('acl' => 'public-read'),

array('starts-with', '$key', ''),

array('starts-with', '$Content-Type', ''),

array('starts-with', '$name', ''),

array('starts-with', '$Filename', ''),

)

)));

$signature = base64_encode(hash_hmac('sha1', $policy, $secret, true));

?>

....

....

$(function () {

$("#uploader").plupload({

runtimes: 'html5',

url: 'http://<?php echo $bucket; ?>.s3.amazonaws.com/',

multipart: true,

multipart_params: {

'key': '${filename}',

'Filename': '${filename}',

'acl': 'public-read',

'Content-Type': 'image/jpeg',

'AWSAccessKeyId': '<?php echo $accessKeyId; ?>',

'policy': '<?php echo $policy; ?>',

'signature': '<?php echo $signature; ?>'

},

file_data_name: 'file',

filters: {

max_file_size: '10mb',

prevent_duplicates: true,

mime_types: [

{title: "Image files", extensions: "jpg,jpeg"}

]

}

});

});

....

我检查了this在Nginx上启用CORS,但事实上,当我将该片段放在我的位置/块上时,只需在打开URL时返回404.

我的Nginx站点配置文件:

server {

listen 80;

server_name myserver.com;

root /usr/share/nginx/myserver/public;

index index.html index.htm index.php;

charset utf-8;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

location = /favicon.ico { access_log off; log_not_found off; }

location = /robots.txt { access_log off; log_not_found off; }

access_log off;

error_log /var/log/nginx/myapp-error.log error;

sendfile off;

client_max_body_size 100m;

location ~ \.php${

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

fastcgi_buffers 4 16k;

}

location ~ /\.ht {

deny all;

}

}

非常感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
plupload是一个基于HTML5和Flash技术的开源文件上组件,它不仅可以用于上文件,还可以用于下载文件。 使用plupload进行下载,首先需要构建一个下载按钮,并为其绑定点击事件。当用户点击下载按钮时,可以通过调用plupload的API方法,向服务器发送下载请求。服务器收到下载请求后,可以将对应的文件发送给客户端进行下载。 在plupload中,可以使用settings对象的url属性来指定下载的服务器地址。可以自定义一个下载接口,当plupload发送下载请求时,该接口负责根据请求中的参数,获取文件的路径,读取文件内容,并发送给客户端进行下载。 例如,构建一个下载按钮的示例代码如下: ```html <button id="downloadBtn">下载文件</button> <script src="plupload.js"></script> <script> // 绑定下载按钮点击事件 document.getElementById('downloadBtn').addEventListener('click', function() { // 使用plupload的API方法发送下载请求 plupload.addFile({ name: 'filename.ext', // 文件名 url: 'download.php' // 下载接口地址 }); }); </script> ``` 在download.php文件中,可以获取到plupload发送的下载请求,根据请求中的参数,读取对应的文件,并将文件内容发送给客户端。下载文件的代码如下: ```php <?php $filename = $_GET['filename']; // 获取下载文件名 // 设置响应头信息,告诉浏览器下载文件 header('Content-Disposition: attachment; filename='.$filename); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '. filesize($filename)); // 输出文件内容 readfile($filename); ?> ``` 以上就是使用plupload进行文件下载的简单示例。当用户点击下载按钮时,plupload将发送下载请求到download.php接口,该接口会读取文件内容并发送给客户端,实现文件下载功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值