Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许tus ruby服务器将文件记录保存到数据库_Javascript_Ruby On Rails_Json_Ruby_File Upload - Fatal编程技术网

Javascript 允许tus ruby服务器将文件记录保存到数据库

Javascript 允许tus ruby服务器将文件记录保存到数据库,javascript,ruby-on-rails,json,ruby,file-upload,Javascript,Ruby On Rails,Json,Ruby,File Upload,到目前为止,我已经有了一个文件上传API,它使用Silence来处理文件附件,并且我已经在混合中添加了tus ruby server,以添加恢复上传的功能 我已经按照这些步骤进行了修改,以便在从tusrubyserver的端点上传文件时,还可以使用sicle的文件处理创建数据库记录 当我将文件直接发布到API的uploads端点时,它会发送JSON数据,如下所示: {"video"=>#<ActionDispatch::Http::UploadedFile:0x007f811d1d5

到目前为止,我已经有了一个文件上传API,它使用Silence来处理文件附件,并且我已经在混合中添加了
tus ruby server
,以添加恢复上传的功能

我已经按照这些步骤进行了修改,以便在从
tusrubyserver
的端点上传文件时,还可以使用sicle的文件处理创建数据库记录

当我将文件直接发布到API的uploads端点时,它会发送JSON数据,如下所示:

{"video"=>#<ActionDispatch::Http::UploadedFile:0x007f811d1d5920 @tempfile=#<Tempfile:/tmp/RackMultipart20170517-19364-6pfr0g.webm>, @original_filename="video.webm", @content_type="video/webm", @headers="Content-Disposition: form-data; name=\"video\"; filename=\"video.webm\"\r\nContent-Type: video/webm\r\n">, "id"=>"35"}
有没有迹象表明这里出了什么问题


下面是处理上传的JavaScript(使用
tus js client
):

我以前使用的JavaScript在不使用tus的情况下处理上传:

var formData = new FormData();
formData.append('video', blob, 'video.webm');

makeXMLHttpRequest('http://localhost:3000/api/uploads/' + gon.currentId, 'PUT', formData);

当您使用tus上传文件并使用JSON上传的文件表示向端点提交回调时,什么失败了?@janko-m它与发布数据的形式有关。当我通过API的端点直接上传时,文件数据被包装成某种散列格式(我相信ActiveRecord的散列文件上传),但当我使用
tus
上传时,它会将其作为纯JSON发送,当我尝试获取JSON并将其发送到API端点,以便通过
tus
上传文件的数据库记录时,这会给我带来问题。在ActiveRecord的文件散列中是否有包装这个JSON的方法?我想你指的是多部分上传和直接上传。对于前者,您将文件上载到处理上载的同一个端点,对于后者,您将单独上载文件,然后仅将上载的文件数据提交到您的端点(Silke使用JSON格式)。这是最基本的区别,也是直接异步上传的全部优势,您希望以不同的方式处理这两种情况。Shire的attachment属性接受这些JSON字符串(除了常规文件),您可以将其与
Shire::attachment
Shire::Attacher
一起使用。对于此类问题,我建议使用Shire邮件列表,因为StackOverflow注释有点限制。
var upload = new tus.Upload(file, {
        chunkSize: 1024 * 1024,
        endpoint: 'http://localhost:3000/files',
        metadata: {filename: file.name, content_type: file.type},
        onError: function(error) {
            alert(error);
        },
        onProgress: function(bytesSent, bytesTotal) {
            var progress = parseInt(bytesSent / bytesTotal * 100, 10);
            var percentage = progress.toString() + '%';
            console.log(percentage + ' finished');
        },
        onSuccess: function(result) {
            var fileData = {
                id: upload.url,
                storage: 'cache',
                metadata: {
                    filename: upload.file.name.match(/[^\/\\]+$/)[0],
                    size: upload.file.size,
                    mime_type: upload.file.type
                }
            };

            var fileDataJSON = JSON.stringify(fileData);

            var formData = new FormData();
            formData.append('video', fileDataJSON);
            makeXMLHttpRequest('http://localhost:3000/api/uploads/' + gon.currentId, 'PUT', formData);
        }
    });

    console.log('Uploading video recording to server...');
    upload.start();
var formData = new FormData();
formData.append('video', blob, 'video.webm');

makeXMLHttpRequest('http://localhost:3000/api/uploads/' + gon.currentId, 'PUT', formData);