将图像文件从jquery上传到node.js

时间:2013-05-27 08:57:24

标签: android node.js jquery

我正在尝试从andriod应用程序上传文件,使用快捷方式将Jquery用于node.js ..

我的客户端代码是:

function uploadData(win) {
        var padI = imagedata.length-1
        while( '=' == imagedata[padI] ) {
          padI--
        }
        var padding = imagedata.length - padI - 1
        var user = load('user')
        $.ajax({
          url:'http://'+server+'/lifestream/api/user/'+user.username+'/upload', 
            type:'POST',
            contentType: false,
          processdata:false,
          data:imagedata, 
          success:win,
          error:function(err){
            showalert('Upload','Could not upload picture.')
          },
        })
      }

我使用了没有任何内容类型的帖子表单,因为如果我使用multipart / form-data,则表示有关边界的错误..

我使用node.js的服务器端代码是:

function upload(req,res) {

    var picid=uuid()
  console.log('Got here..' + __dirname)
  //console.log('Image file is here ' + req.files.file.path)
 // console.log('local name: ' + req.files.file.name)
  var serverPath = __dirname+'/images/' + picid+'.jpg'
   fs.rename(
    req.files.file.path,
    serverPath,
    function(error) {
      if (error) {
        console.log('Error '+error)
        res.contentType('text/plain')
        res.send(JSON.stringify({error: 'Something went wrong saving to server'}))
        return;
      }           
    // delete the /tmp/xxxxxxxxx file created during download
    fs.unlink(req.files.file.path, function() { })
    res.send(picid)
    }
    )
}

当文件到达服务器时,它会给出res.files.file错误。

我搜索过很多论坛,他们说只有当contenttype是multipart / form-data时才会访问res.files.file但是会出现边界问题

对此有任何帮助表示高度赞赏

2 个答案:

答案 0 :(得分:0)

Boundary是一个特殊的字符序列,用于分隔二进制数据。

您应该将MIME类型提交为multipart / form-data,并将imagedata设置为FormData()类型(从您的代码段开始,不清楚它是否为FormData类型)。

以下是类似的问题和解决方案:

How to set a boundary on a multipart/form-data request while using jquery ajax FormData() with multiple files

jQuery AJAX 'multipart/form-data' Not Sending Data?

答案 1 :(得分:0)

编写此代码的一个很好的替代方法是使用filepicker.io这允许您连接到yoru自己的s3存储桶。保存文件后,您将使用S3网址返回回调,然后您可以将该网址简单地传递给您的节点api,然后保存。我用它来避免编写额外的服务器代码来处理文件上传。额外的好处,如果您需要对图像执行此操作,并希望用户能够编辑图像,您可以使用Aviary允许在本地编辑图像,然后您可以获取另一个s3网址,然后,您可以保存到您的服务器..