我是VueJs的新手,我想使用vuejs输入图像文件和一些文本来创建新用户。到目前为止,我已经制作了base64图像,但我不知道如何将这个base64图像传递给服务器中的slim代码。 这是我的vue代码:
输入文件
<input class="file-input" type="file" name="userPhoto" @change="uploadPhoto">
方法:
uploadPhoto: function(e){
var reader = new FileReader()
reader.readAsDataURL(e.target.files[0])
reader.onload = (e) => {
this.usr.user_photo = e.target.result
}
}
发布:
console.log(this.usr);
this.$http.post('MyAPI', this.usr)
.then(function(response){
this.$router.push({path: '/'});
}
console.log输出此对象: Image
这是我在苗条的帖子请求中的代码
$app->post('/api/user/add', function(Request $request, Response $response){
//Upload Files
$directory = $this->get('upload_directory');
$uploadFiles = $request->getUploadedFiles();
$uploadedFile = $uploadFiles['userPhoto'];
if($uploadedFile->getError() === UPLOAD_ERR_OK){
$filename = moveUploadedFile($directory,$uploadedFile);
$response->write('Uploaded '.$filename.'<br/>');
}
function moveUploadedFile($directory, UploadedFile $uploadedFile){
$extension = pathinfo($uploadedFile->getClientFilename());
$basename = bin2hex(random_bytes(8));
$filename = sprinf('%s.%0.8s',$basename, $extension);
$uploadedFile->moveTo($directory.'/'.$filename);
return $filename;
}
$user_id = $request->getParam('user_id');
$password = $request->getParam('password');
$name = $request->getParam('name');
$status = $request->getParam('status');
$prodi = $request->getParam('prodi');
$social_link = $request->getParam('social_link');
$sql = "INSERT INTO user
VALUES (:user_id,:password,:name,:status,:prodi,CURRENT_TIMESTAMP(),'$filename',:social_link)";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':password', $password);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':prodi', $prodi);
$stmt->bindParam(':social_link', $social_link);
$stmt->execute();
echo '{"notice" : {"text": "User Added"}}';
} catch(PDOException $e){
echo '{"Error": {"text": }'.$e->getMessage().'}';
}
});
我已经尝试使用resteasy并复制粘贴&#34; usr&#34;中的所有对象,但是我收到了这个错误:
500内部服务器错误
有人能告诉我怎么做吗?感谢
答案 0 :(得分:0)
您的ajax请求包含json编码属性“user_photo”中的图像数据,格式为Data URI scheme。
这不是“经典”文件上传,因此此代码无法按预期工作。
$uploadFiles = $request->getUploadedFiles();
相反您可以尝试从json数据中读取数据URI。
$userPhoto = $request->getParam('user_photo');
然后尝试解码数据URI字符串并将其另存为文件。
$userPhoto = str_replace("\n", "", $userPhoto);
$userPhotoData = substr($userPhoto, strpos($userPhoto, ',') + 1);
// Decode the base64 string
$userPhotoData = base64_decode($userPhotoData);
// Save the file
file_put_contents('filename.jpg', $userPhotoData);
注意:切勿在Slim中使用echo
。改为使用响应对象。
$result = [
'notice' => [
'text' => 'User Added'
]
];
return $response->withJson($result);