PHP/jQuery S3 上传不适用于带空格的文件

Posted

技术标签:

【中文标题】PHP/jQuery S3 上传不适用于带空格的文件【英文标题】:PHP/jQuery S3 upload doesn't work on files with spaces 【发布时间】:2013-05-26 13:43:25 【问题描述】:

结合使用几个不同的脚本,我正在尝试创建一个工具,允许用户将视频从他们的本地机器上传到 S3 存储桶。它在没有任何空格的文件上表现出色,但如果有任何空格(上传失败并且我收到 XHR 错误),则会完全窒息。

上传表格:

<table>
    <tr>
        <td>File:</td>
        <td><input type="file" id="files" name="files[]" multiple /></td>
    </tr>
    <tr>
        <td>Title:</td>
        <td><input type="text" id="title" name="title" size="50" /></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="submit" id="submit" name="submit" value="Start Encoding" /></td>
    </tr>
</table>

<script type="text/javascript">
document.getElementById('submit').addEventListener('click', handleFileSelect, false);
setProgress(0, 'Waiting for upload.');
</script>

这里是javascript:

函数句柄文件选择() setProgress(0, '上传开始...'); var files = document.getElementById('files').files; var title = document.getElementById('title').value; var pieces = files[0].name.split("."); var fext = "-原始。" + 件[件.长度 - 1]; //fext = "-original.jpg" var currdatetime = new Date().getTime(); var dokey = "FINVID" + currdatetime; //dockey = "FINVID20130523123546 文件[0].name = dokey; $.get("updatetxtfile.php", vidid: dokey, vidtitle: title ); 上传文件(文件[0],fext); 函数上传文件(文件,fext) executeOnSignedUrl(文件,函数(签名 URL) uploadToS3(file, signedURL, fext); ,fext); 函数uploadToS3(文件,网址,fext) var xhr = createCORSRequest('PUT', url); 如果(!xhr) setProgress(0, '不支持CORS'); 别的 xhr.onload = 函数() 如果(xhr.status == 200) setProgress(100, '上传完成'); 触发器编码(文件,fext); 别的 setProgress(0, '上传错误:' + xhr.status); ; xhr.onerror = 函数() setProgress(0, 'XHR 错误。'); ; xhr.upload.onprogress = 函数(e) if (e.lengthComputable) var percentLoaded = Math.round((e.loaded / e.total) * 100); setProgress(percentLoaded, percentLoaded == 100 ? 'Finalizing...' : 'Uploading...'); ; xhr.setRequestHeader('Content-Type', file.type); xhr.setRequestHeader('x-amz-acl', 'public-read'); xhr.send(文件);

因此,用户选择一个视频文件,点击提交,handleFileSelect 被触发。最好我想在上传之前重命名文件,但我什至不能这样做。从规格上看,这似乎是不可能的。那么到底发生了什么?想想我不能上传一个有空格的文件真是太疯狂了,所以我一定是搞错了,对吧?

【问题讨论】:

【参考方案1】:

签出this。

看起来您可以轻松管理键值(静态或动态)

<input type="hidden" name="key" value="uploads/$filename">

以及回调动作

<input type="hidden" name="success_action_redirect" value="http://localhost/">

手动上传不会造成太多麻烦。

如果需要,您始终可以将其设为 ajax,但请确保您使用了他们接受的所有非常有用的参数。

【讨论】:

以上是关于PHP/jQuery S3 上传不适用于带空格的文件的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 选择器不适用于添加的类

s3 和发电机配置不适用于 Loki

StringEquals sourceVpc不适用于S3策略

相机意图不适用于三星 Galaxy S3

Amazon S3 静态 Web 托管不适用于自定义域名(点问题)

使用 NodeJS 和 AWS S3 将损坏/截断的 mp4 上传到 S3 存储桶