上传SVG Laravel 5.5

时间:2018-01-09 12:34:46

标签: php laravel-5 image-uploading

如何使用Laravel 5.5正确上传svg文件? 标准图像验证规则不会将其视为正确的图像(图像| mimes:jpeg,png,jpg,gif,svg)

当我删除所有验证时,文件将被存储为txt文件。

我的上传代码: $request->file('image')->store('images', 'public');

2 个答案:

答案 0 :(得分:0)

这将工作

使用就像这样工作

if ($request->hasFile('file')) {
      $file = $request->file('file');       
       $file->move($file, 'uploads/audio');
}

答案 1 :(得分:0)

从创建文件的 svg 字符串中,我没有成功发送字符串,因为它在传输到 Laravel 后滥用了一些错误的字符。到目前为止,okhttp 与 Android 相比:

private static final MediaType MEDIA_TYPE_TXT =MediaType.parse("text/plain");
....
MultipartBody.Builder obj_ = new MultipartBody.Builder().setType(MultipartBody.FORM);
 fileImzo_ = new File(fileSafar_.getAbsoluteFile().getParentFile().getAbsolutePath(),"imzo.txt");
        String nomiImzo_ = fileImzo_.getName();
//svgImzo is a raw SVG xml string
        InputStream stream_ = new ByteArrayInputStream(svgImzo.getBytes(StandardCharsets.UTF_8));
        try {
            try (OutputStream output_ = new FileOutputStream(fileImzo_)) {
                byte[] buffer = new byte[4 * 1024]; // or other buffer size
                int read;

                while ((read = stream_.read(buffer)) != -1) {
                    output_.write(buffer, 0, read);
                }

                output_.flush();
            }
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            try {
                stream_.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        obj_.addFormDataPart("fileImzo", nomiImzo_, RequestBody.create(fileImzo_, MEDIA_TYPE_TXT));
}
    RequestBody req = obj_
            .addFormDataPart("copayDodmi", "" + copayDodmi)
            .addFormDataPart("izoh", xavar.getText().toString())
            .addFormDataPart("driver_id", "" + driverId_)
            .build();
    Request request = new Request.Builder()
            .header("Authorization", "Bearer " + token)//Authorization
            .url(MehmonxonaActivity.URLI_ASSOSI + "/supurdani_paket_dodashud")
            .post(req)
            .build();
....

Laravel 控制器中,假设我们将文件路径添加到数组以更新表中的一行:

....
 if ($request->hasFile('fileImzo')) {
        $imzo_filename = $this->sozuNomiFaylate('fileImzo', $request);
        if (!is_null($imzo_filename)) {
            $arr['signature_svg'] = $imzo_filename;
        }
    }
....

和函数 soz​​uNomiFaylate():

....

private function sozuNomiFaylate(string $alias, \Illuminate\Http\Request $request)
{
    $separatorLcl = DIRECTORY_SEPARATOR;
    $image = $request->file($alias);
    $ext=$image->getClientOriginalExtension();
    if($ext==='svg' || $ext==='SVG' ||  $ext==='txt'|| $ext==='')
        $ext='svg';
    $filename = time() . '.' .$ext ;
    $path = public_path('images' . $separatorLcl . 'uploads' . $separatorLcl . $filename);
    if($ext==='svg' || $ext==='SVG' ||  $ext==='txt'|| $ext===''){
        File::put($path,$image->get());//Illuminate\Support\Facades\File
    }else
    try {
        l::k($path);
        Image::make($image)->save($path);
    } catch (\Exception $e) {
        l::k($e->getMessage());
        l::k($e->getTraceAsString());
        l::k('fayl  soxta na shud');
        return null;
    }
    return $filename;
}
....

大功告成