j查询-文件-上传前重命名文件
jQuery-File-Upload rename file before upload
我正在使用 lib jQuery-File-Upload 在我的 aws s3 存储桶上上传文件。我的问题是我想在上传之前重命名我的文件,因为如果文件名上有特殊字符,aws 返回的 url 不正确,我无法在我的控制器轨道中打开它。
有没有办法覆盖库中的函数来重命名文件?
谢谢
在遵循 Heroku 教程后,我遇到了类似的挑战。 我想从文件名中删除空格并根据当前项目添加文件夹前缀。 为了在上传到 S3 之前更改文件名,我添加了一个提交回调,其中我在客户端修改了名称。
fileInput.fileupload({
...
submit: function (e, data) {
// Get the original filename
var fileName = data.originalFiles[0].name
// Get the prefix from the form
var keyPrefix = form.data('key-start')
// Combine the prefix and the original filename with start/end whitespace removed
var fullFileName = keyPrefix + fileName.trim();
// Replace whitespaces with underscores
// At this step you could replace other special characters as well
var newFileName = fullFileName.replace(/'s+/g, '_');
// Update the form data with the new key value
$(form.data('form-data')).attr("key", newFileName);
// Set the form data
data.formData = form.data('form-data');
},
...
});
由于我更改了文件名,我需要确保 S3 也知道这一点。 本教程建议控制器set_s3_direct_post
方法中的key
值为:
key: "uploads/#{SecureRandom.uuid}/${filename}"
key
方法要求文件名与创建帖子 URL 时提供的内容匹配(它不会,因为我没有使用动态${filename}
值,并且我不知道创建直接帖子 URL 时的最终文件名指定它)。我使用了 key_starts_with
方法,以便我可以指定项目文件夹前缀(删除空格),S3 只会评估匹配项:
key_starts_with: "#{(current_project.name).strip.split(' ').join('_')}/"
我最后set_s3_direct_post
方法是:
def set_s3_direct_post
@s3_direct_post = S3_BUCKET.presigned_post(key_starts_with: "#{(current_project.name).strip.split(' ').join('_')}/", success_action_status: '201', acl: 'public-read')
end
有关key_starts_with
的更多详细信息,请参阅适用于 Ruby 的 AWS 开发工具包。
作为参考,这是我的表单,其中包含添加的key-start
数据值:
<%= simple_form_for @asset, html: {class: 'directUpload new_asset', data: { 'form-data' => (@s3_direct_post.fields), 'key-start' => "#{current_project.name}/#{SecureRandom.hex(4)}_" , 'url' => @s3_direct_post.url, 'host' => URI.parse(@s3_direct_post.url).host } } , :url => project_assets_path(current_project) do |f| %>
<%= f.input :name %>
<%= f.input :file, as: :file %>
<%= f.button :submit, "Add File", class: "addFileButton" %>
<% end %>
就我而言,我只将其用于单个文件上传,只想确保从文件名中删除空格(我是此上传表单的两个用户之一,因此文件名的特殊字符或其他问题不是问题)。
在添加:回调中,将"密钥"的 s3 签名从"/somefolder/${filename}"更改为"/somefolder/your-new-name"
s3_signatures = {
key: '/somefolder/${filename}',
…
}
$('.fileupload').fileupload({
url: url,
type: 'POST',
formData: s3_signatures, // adding signature for S3
add: function(e, data){
s3_signatures['key'] = '/somefolder/your-new-name';
data.formData = s3_signatures;
data.submit();
} …
- 正在使用Dropzone.js删除服务器上已重命名的文件
- 我正在尝试将javascript文本框的输入保存回服务器.我想从保存的弹出文本框中获得输入,以重命名文件夹
- 使用AjaxForm Jquery重命名文件
- 在S3中上传之前重命名文件
- Phonegap使用moveTo重命名文件
- 使用 NPM 重命名文件
- 在 Express 服务器上上载期间使用用户定义的名称重命名文件
- 使用序号重命名文件 - 从文件夹中的最高数字开始索引
- 如何在上传前重命名文件
- 下载时重命名文件,但不适用于AWS S3
- Photoshop Javascript脚本:重命名文件并保存为
- 在Express.js应用中自动添加/重命名文件夹
- 在Google Drive / Google Sheet中重命名文件
- 重命名文件在谷歌云存储
- Javascript重命名文件下载
- 当同时添加2个文件时,重命名文件失败
- 使用Gulp w/特定模式重命名文件
- j查询-文件-上传前重命名文件
- 如何使用grunt重命名文件夹名称
- 使用node.js重命名文件