javascript - 使用 jquery 将文件上传到 Slack API files.upload

标签 javascript jquery ajax slack slack-api

我正在尝试在网页上选择一个文件并通过 Slack API 将其发布到 Slack 中。

我最初是在做:

var request = require('request');
$(".submit").click(function(){
    request.post({
    url: 'https://slack.com/api/files.upload',
    formData: {
        token: "myTokenHere",
        title: "Image",
        filename: "image.png",
        filetype: "auto",
        channels: "mychannel",
        file: document.getElementById('idofuploadelement').files[0]
    },
}, function (err, response) {
    console.log(JSON.parse(response.body));
});

然后我转而尝试 Ajax,这样我就不必包含 require。

$(".submit").click(function(){
$.ajax({
    type: "POST",
    method: "POST",
    enctype: "multipart/form-data",
    url: 'https://slack.com/api/files.upload',
    formData: {
        token: "myTokenHere",
        title: "Image",
        filename: "image.png",
        filetype: "auto",
        channels: "mychannel",
        file: document.getElementById('idofuploadelement').files[0]
        }   
}).done(function(url) {
    console.log(url);
            });
});

但这给了我控制台警告 表单包含文件输入,但表单上缺少 method=POST 和 enctype=multipart/form-data。该文件将不会被发送。 即使我有这些属性(在添加它们之前我也遇到了错误),我仍然收到错误。

我的html是简单的html5输入标签(用于上传和提交按钮)

<input type="file" name="fileToUpload" id="idofuploadelement">
<input type="submit" name="submit" class="submit action-button next" value="Next"/>

简而言之,我正在尝试将文件发送给我(以任何方式,Slack、Github、电子邮件等),而无需启动服务器。可能吗?

最佳答案

弄清楚了:

HTML:

<form id="myform" method="POST" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="file-select">
    <input id="upload-button" type="submit" name="submit" class="submit action-button next" value="Next"/>
</form>

JS:

var form = document.getElementById('myform');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');
form.onsubmit = function(event) {
    event.preventDefault();
    // Update button text.
    uploadButton.innerHTML = 'Uploading...';
    var file = fileSelect.files[0];
    var formData = new FormData();
    formData.append('file', file, file.name);
    formData.append('token', insert_token_here);
    formData.append('channels', insert_channel_here);
    var xhr = new XMLHttpRequest();
    xhr.open('POST','https://slack.com/api/files.upload', true);

    // Set up a handler for when the request finishes.
    xhr.onload = function () {
      if (xhr.status === 200) {
        // File(s) uploaded.
        uploadButton.innerHTML = 'Uploaded';
      } else {
        alert('An error occurred!');
      }
    };
    xhr.send(formData);
}

关于javascript - 使用 jquery 将文件上传到 Slack API files.upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45471574/

相关文章:

javascript - 文本区域鼠标位置问题

javascript - 使用 jquery 动画化 iframe 内容

javascript - 使用ajax查找目录中的文件数量

ajax - 部分 View 也返回共享布局页面

php - MySQL/PHP : Update MySQL with Ajax

c# - 为 .net c# 开发我们自己的工具包

使用 Twig 模板打开模态时 JavaScript 不会触发

javascript - 如何使用 jQuery UI 在 contenteditable div 中拖放文本

javascript - 我如何拥有输入按钮和 <a> 标签?

javascript - 使用 javascript 异步加载时,我该如何替换 document.write ?