func (c *Camera) FileReader(folder string, fileName string) io.ReadCloser { cfr := new(cameraFileReader) cfr.camera = c cfr.folder = folder cfr.fileName = fileName cfr.offset = 0 cfr.closed = false cFileName := C.CString(cfr.fileName) cFolderName := C.CString(cfr.folder) defer C.free(unsafe.Pointer(cFileName)) defer C.free(unsafe.Pointer(cFolderName)) C.gp_file_new(&cfr.cCameraFile) C.gp_camera_file_get(c.camera, cFolderName, cFileName, C.GP_FILE_TYPE_NORMAL, cfr.cCameraFile, c.context) var cSize C.ulong C.gp_file_get_data_and_size(cfr.cCameraFile, &cfr.cBuffer, &cSize) cfr.fullSize = uint64(cSize) return cfr }
//DownloadImage saves image pointed by path to the provided buffer. If leave on camera is set to false,the file will be deleted from the camera internal storage func (file *CameraFilePath) DownloadImage(buffer io.Writer, leaveOnCamera bool) error { gpFile, err := newGpFile() if err != nil { return err } defer C.gp_file_free(gpFile) fileDir := C.CString(file.Folder) defer C.free(unsafe.Pointer(fileDir)) fileName := C.CString(file.Name) defer C.free(unsafe.Pointer(fileName)) if retval := C.gp_camera_file_get(file.camera.gpCamera, fileDir, fileName, FileTypeNormal, gpFile, file.camera.gpContext); retval != gpOk { return fmt.Errorf("Cannot download photo file, error code :%v", retval) } err = getFileBytes(gpFile, buffer) if err != nil && leaveOnCamera == false { C.gp_camera_file_delete(file.camera.gpCamera, fileDir, fileName, file.camera.gpContext) } return err }