Запись массива http-запроса drakma в файл - PullRequest
3 голосов
/ 30 июля 2011

Что я хочу сделать: возьмите вывод (drakma:http-request "someURL.jpg") и запишите его в файл. Вывод состоит из байтового массива.

Что я придумал:

(with-open-file (my-stream "thing.jpg" 
                           :direction :output
                           :element-type 'binary 
                           :if-does-not-exist :create
                           :if-exists :supersede)
  (let ((content (drakma:http-request "someURL.jpg")))
    (loop for i across content do
      (write-byte i my-stream))))

Я получаю ошибку:

debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING
                                                {1002978FB1}>:
  could not find any output routine for :FULL buffered BINARY

Я использую SBCL 1.0.49. Если вам нужна какая-либо другая информация или мой вопрос неясен, пожалуйста, спросите:).

EDIT: Проблема в том, что: element-type, он должен быть «unsigned-byte». Вы можете найти информацию о различных возможностях: element-type over в Common Lisp Hyper Spec в open . Кроме этого все правильно.

PS. Я не мог ответить как ответ, потому что моя репутация слишком низкая.

1 Ответ

4 голосов
/ 02 августа 2011

Как сказал Xach, вам лучше использовать '(unsigned-byte 8) (или сделать определение типа, например, (deftype binary () '(unsigned-byte 8))).

Кроме того, вы, вероятно, можете заменить свой цикл над массивом и писать побайтно с помощью вызова write-sequence

...