php - Laravel 格式错误的 UTF-8 字符,可能使用图像干预错误编码
问题描述
我有一个上传图片的 laravel 项目。我使用图像干预库进行上传。问题是我有一个500
错误并说Malformed UTF-8 characters, possibly incorrectly encoded
。但是当我查看要保存的目录时,图像已保存,但数据未保存到数据库中。只保存了图像。似乎图像保存成功,但请求未成功。似乎是什么问题?
控制器
public function store(Request $request)
{
$product = new Product;
$validator = \Validator::make($request->all(), [
'product_name' => 'required',
'barcode' => 'required|unique:products',
'price'=> 'required',
'category' => 'required',
'supplier' => 'required',
// 'image' => 'required|image64:jpeg,jpg,png'
]);
if ($validator->fails()) {
$errors = json_encode($validator->errors());
return response()->json([
'success' => false,
'message' => $errors
],422);
} else {
$product->barcode = $request->barcode;
$product->product_name = $request->product_name;
$product->price = $request->price;
$product->quantity = 0;
$product->category = $request->category;
$product->supplier_id = $request->supplier;
//image
$imageData = $request->image;
$fileName = time().'.'. explode('/', explode(':', substr($imageData, 0, strpos($imageData, ';'))) [1])[1];
$product->image = \Image::make($request->image)->save(public_path('img/').$fileName);
$product->save();
broadcast(new ProductsEvent(\Auth::user()->name, 'add', $product))->toOthers();
}
}
表单更改时的Vue组件事件
onFileChange(e) {
let file = e.target.files[0];
console.log(file);
var reader = new FileReader();
reader.onloadend = (file)=>{this.image = reader.result}
reader.readAsDataURL(file);
},
解决方案
看来问题出现在你们$filename
这一代。
只要您保存了正确的图像,命名约定就在您手中。
我建议您使用更简单的方法,例如
$fileName = now()->timestamp . '_' . $imageData->name;
,您无需花哨的文件名。
的值$imageData
无法预测,您执行的所有操作都可能导致该问题。
Laravel已经问过这个问题“格式错误的 UTF-8 字符,可能编码不正确”,如何解决?
- - 编辑 - -
您可以直接从您的 javascript 中获取文件名,因为您在那端进行所有操作,因此您可以例如添加this.name = file.name;
到您发送的数据中,然后在您的 ajax 中您可以像这样发送该数据 -
axios.post('/image/store',{
image: this.image,
imageName: this.name
}).then(response => {...});
在你的后端$fileName = now()->timestamp . '_' . $request->imageName;
推荐阅读
- powershell - 使用 powershell 提取的拆分值表
- database - 在 postgresql 中发送数据集
- python - 为什么我在应用此代码时收到此错误。我在下面附上了错误和代码?
- moq - 对 Web API 插入记录方法执行 xUnit Moq 测试
- node.js - nodejS express 服务器是否启动并运行而无需编写 app.listen() 语句?
- mapbox - mapbox 地理编码 API 响应中缺少 short_code(对于美国领土内的一个区域)
- r - 如何在R中导入具有相同模式的excel表?
- javascript - 如何增加或减少数组的多个输入的值?
- php - 以编程方式创建的 WooCommerce 订单对新用户不征税
- node.js - 如何在 process.env 中存储使用 mongodb-memory-server 生成的 uri?