我正在尝试从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但是会出现边界问题
对此有任何帮助表示高度赞赏
答案 0 :(得分:0)
Boundary是一个特殊的字符序列,用于分隔二进制数据。
您应该将MIME类型提交为multipart / form-data,并将imagedata
设置为FormData()
类型(从您的代码段开始,不清楚它是否为FormData类型)。
以下是类似的问题和解决方案:
答案 1 :(得分:0)
编写此代码的一个很好的替代方法是使用filepicker.io这允许您连接到yoru自己的s3存储桶。保存文件后,您将使用S3网址返回回调,然后您可以将该网址简单地传递给您的节点api,然后保存。我用它来避免编写额外的服务器代码来处理文件上传。额外的好处,如果您需要对图像执行此操作,并希望用户能够编辑图像,您可以使用Aviary允许在本地编辑图像,然后您可以获取另一个s3网址,然后,您可以保存到您的服务器..