Laravel: yükleniyor değil Base64 Görüntü

oy
0

Laravel ve PHP kullanarak, bir veritabanına fotoğraf eklemek çalışıyorum. Bu veritabanı sadece sürer base64görüntüleri.

Ben, belirli bir dosyayı almak bir resim türü (png, jpg, vb) olduğunu doğrulamak ve olarak kodlamak için deneyin base64görüntüye. Sonra nesne hakkında diğer detayları ile veritabanına yükleyin deneyin.

Ancak, bu çalışmıyor. Bunun yerine bir veri türü uyuşmazlığı söylendi:

Sqlstate [HY000]: Genel hatası: değişken ikili (max) bildirilen veri türü (max) 20018 örtük dönüştürme izin verilmez. Bu sorguyu çalıştırmak için CONVERT işlevini kullanın. [20018] (şiddeti 16)

Ben ekleme gelen 'fotoğraf' değerini kaldırdığınızda Kodum kesinlikle çalışır. Bu yüzden o ne yapıyorum ile sorun olabilir ne olduğunu merak ediyorum.

Benim laravel denetleyici işlevi aşağıya bakın.

public function addStudent(Request $request) {
    $courses = [1, 2, 3, 4, 5];
    $statuses = [1,2,3,4];

    $validated = Validator::make($request->all(), [
      submit      => required,
      student_id  => [required, integer, regex:/^[0-9]+$/],
      forename    => [required, regex: /^[a-zA-Z’'. -]+$/],
      surname     => [required, regex: /^[a-zA-Z’'. -]+$/],
      course_id   => [required, Rule::in([1, 2, 3, 4, 5]) ],
      status_id   => [required, Rule::in([1, 2, 3, 4]) ],
      /*Image validation done here: must be of the types below
      Since this part passes, I know I am working with an image */
      photo       => required|image|file:jpeg,png,jpg,gif,svg|max:2048
]);
$errors = $validated->errors();
if($validated->fails()) {
  return redirect()->back()->withInput($request->all())->withErrors($errors);
}
$data = $request->all();

/* Here I try to encode the image as base64 */
if ($request->hasFile(photo)) {
  if($request->file(photo)->isValid()) {
    $file = $request->file('photo');
    $image = base64_encode($file);
    $image = base64_encode(file_get_contents($request->file('photo')));
    if (!($image)) {
      echo <h3>Image null!</h3>;
    }
  }
} else {
  echo <h3>Request doesn't have photo</h3>;
}
/*Try to upload values to database, return errors if fail */
try {
  $insert =
  DB::table('CCEAGpoc.dbo.Student')->insert([
    ['student_id'  => $data['student_id'],
    'forename'    => $data['forename'],
    'surname'     => $data['surname'],
    'course_id'   => $data['course_id'],
    'photo'       => $image,
    'status_id'   => $data['status_id']]
  ]);
  return view('success');
} catch (Exception $ex) { 
  return redirect()->back()->withInput($request->all())->withErrors($errors);
}

Tam Anlaşılır olması için, benim formu şöyle:

<form action=submitAdd method=post class=form-inline enctype=multipart/form-data>
  @csrf
  ...
  <div class=form-group>
      <label for=photo>Photo: </label>
        <input type=file name=photo />
  </div>

  <div class=form-group>
    <input type=submit name=submit value=Add Student />
  </div>
</form>

Dürüst yukarıda hataya neden olan yaklaşık ne olduğundan emin değilim. Herkes yardımcı olabilir, ben derece müteşekkir olurum.

Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Sadece kabul edecek gibi, değişken ikili sahaya eklemek için önce ikili için base64 dize çözmelisiniz binaryverileri.

base64 güvenli bir ikili dosya aktarımı izin, ama bir dize türüdür gibi, mssql varbinary için geçerli bir ikili değeri değil.

DECLARE @string varchar(20)

SET @string = 'Hello World'

SELECT CONVERT(varbinary, @string)

senin aslında mssql kullanıyorsanız Ayrıca, orada (gün veritabanına bu benim tipik bir gün mssql mssql beceri bir sürü, buna göre sorunuzun insanların orada çok mssql etiketi eklemek gerekir, bunun bilgim ciddiye limitated edilir ) sorunuzu eksik olduğunu.

Cevap 08/11/2018 saat 13:01
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more