Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 如何使用jQuery或其他js框架将字符串作为文件上传_Javascript_Jquery_Ajax_Upload_Extjs - Fatal编程技术网

Javascript 如何使用jQuery或其他js框架将字符串作为文件上传

Javascript 如何使用jQuery或其他js框架将字符串作为文件上传,javascript,jquery,ajax,upload,extjs,Javascript,Jquery,Ajax,Upload,Extjs,使用javascript,我有一个字符串文件(通过ajax请求获得) 如何通过另一个ajax请求将其作为文件上传到服务器 您需要将内容类型请求头设置为多部分/表单数据,并使用普通的Ol'JavaScript(tm)稍微调整一下格式,但您可以轻松地为库修改它: 编辑:我现在喝咖啡了,所以为jQuery修改了它(没有库版本): 下面介绍如何在不手动构建多部分请求主体的情况下执行此操作: var s = 'some string data'; var filename = 'foobar.txt';

使用javascript,我有一个字符串文件(通过ajax请求获得)


如何通过另一个ajax请求将其作为文件上传到服务器

您需要将
内容类型
请求头设置为
多部分/表单数据
,并使用普通的Ol'JavaScript(tm)稍微调整一下格式,但您可以轻松地为库修改它:

编辑:我现在喝咖啡了,所以为jQuery修改了它(没有库版本):


下面介绍如何在不手动构建多部分请求主体的情况下执行此操作:

var s = 'some string data';
var filename = 'foobar.txt';

var formData = new FormData();
formData.append('file', new File([new Blob([s])], filename));
formData.append('another-form-field', 'some value');

$.ajax({
    url: '/upload',
    data: formData,
    processData: false,
    contentType: false,
    type: 'POST',
    success: function () {
        console.log('ok');
    },
    error: function () {
        console.log('err'); // replace with proper error handling
    }
});

使用新FormData()而不使用ajax的解决方案

str = "Hello!\nI'm text string";
var strblob = new Blob([str], {type: 'text/plain'});

var formdata = new FormData();
formdata.append("file", strblob, "file.txt");
formdata.append("field-1", "field-1-data");

var requestOptions = {
  method: 'POST',
  body: formdata,
  redirect: 'follow'
};

fetch("http://{url}", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error))

请澄清:您是将文件路径设置为字符串,还是将文件内容设置为字符串,并希望将其作为文件上载?@Marko:这看起来像是他将文件内容设置为字符串,这是他从ajax请求中获得的。嗯,很好!我不知道在Ajax请求中这是可能的。@Pekka:当然知道。如果您无法控制要上载到的服务器,并且该服务器必须接受使用multipart/form-data发布的文本文件,则此操作非常方便。除了使用express/node进行两次调整外:1)最后一个边界需要是
+'-'+boundary+'--'
以及ajax调用中的contentType需要是:
“multipart/form data;boundary=“+boundary
@chovy Rails也需要它。谢谢,你刚刚帮我省了几个小时的调试时间看起来不错。。。我可以将Base64转换为文件对象吗?如果没有,我可以使用base64并在服务器上解码它。但我只是好奇FormData对象跨浏览器兼容吗?我使用的是Dropzone,但这个答案可以将字符串转换为文件以供上传(“新文件([new Blob([s])),filename)”。为什么contentType为false?
str = "Hello!\nI'm text string";
var strblob = new Blob([str], {type: 'text/plain'});

var formdata = new FormData();
formdata.append("file", strblob, "file.txt");
formdata.append("field-1", "field-1-data");

var requestOptions = {
  method: 'POST',
  body: formdata,
  redirect: 'follow'
};

fetch("http://{url}", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error))