Чтобы сделать это с помощью JS
Вы можете присоединить их непосредственно к контейнеру div, или вы можете нажать их в массив. Ниже показано, как добавить их в ваш div.
1) Когда вы храните свои изображения в хранилище, создайте ссылку на изображение в базе данных firebase со следующей структурой
/images/(imageName){
description: "" ,
imageSrc : (imageSource)
}
2) Когда вы загружаете документ, вытащите все URL-адреса источника изображения из базы данных, а не в хранилище, с помощью следующего кода
$(document).ready(function(){
var query = firebase.database().ref('images/').orderByKey();
query.once("value").then(function(snapshot){
snapshot.forEach(function(childSnapshot){
var imageName = childSnapshot.key;
var childData = childSnapshot.val();
var imageSource = childData.url;
$('#imageGallery').append("<div><img src='"+imageSource+"'/></div>");
})
})
});
Напишите пользовательский парсер или используйте одну из функций замены строки, чтобы заменить разделитель «:», а затем используйте sscanf()
.
Я просил использовать простой код sscanf. Я хочу иметь базовый способ разбора.
cat urlparse.c
#include <stdio.h>
int main(void)
{
const char text[] = "http://192.168.0.2:8888/servlet/rece";
char ip[100];
int port = 80;
char page[100];
sscanf(text, "http://%99[^:]:%99d/%99[^\n]", ip, &port, page);
printf("ip = \"%s\"\n", ip);
printf("port = \"%d\"\n", port);
printf("page = \"%s\"\n", page);
return 0;
}
./urlparse
ip = "192.168.0.2"
port = "8888"
page = "servlet/rece"
Лично я украл модуль HTParse.c
из W3C (например, он используется в веб-браузере lynx ). Затем вы можете делать такие вещи, как:
strncpy(hostname, HTParse(url, "", PARSE_HOST), size)
. Важно использовать хорошо зарекомендовавшуюся и отладочную библиотеку, так это то, что вы не попадаете в типичные ловушки синтаксического анализа URL (много регулярных выражений терпят неудачу, если хост является IP-адресом, например, специально для IPv6).
Это может быть полезно. Он реализует чистое решение C с помощью sscanf.
https://github.com/luismartingil/per.scripts/tree/master/c_parse_http_url
It использует
// Parsing the tmp_source char*
if (sscanf(tmp_source, "http://%99[^:]:%i/%199[^\n]", ip, &port, page) == 3) { succ_parsing = 1;}
else if (sscanf(tmp_source, "http://%99[^/]/%199[^\n]", ip, page) == 2) { succ_parsing = 1;}
else if (sscanf(tmp_source, "http://%99[^:]:%i[^\n]", ip, &port) == 2) { succ_parsing = 1;}
else if (sscanf(tmp_source, "http://%99[^\n]", ip) == 1) { succ_parsing = 1;}
(...)
С регулярным выражением , если вам нужен простой способ. В противном случае используйте FLEX / BISON .
Вы также можете использовать библиотеку синтаксического анализа URI
Этот уменьшил размер и отлично работал для меня http://draft.scyphus.co.jp/lang/c/url_parser.html . Всего два файла (* .c, * .h). Мне пришлось адаптировать код [1].
[1] Измените все вызовы функций с http_parsed_url_free (purl) на parsed_url_free (purl)
//Rename the function called
//http_parsed_url_free(purl);
parsed_url_free(purl);
Может быть, поздно, ... то, что я использовал, - это функция http_parser_parse_url()
и необходимые макросы, выделенные из Joyent / HTTP parser lib - которые хорошо работали, ~600
LOC .
Я написал это
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct
{
const char* protocol = 0;
const char* site = 0;
const char* port = 0;
const char* path = 0;
} URL_INFO;
URL_INFO* split_url(URL_INFO* info, const char* url)
{
if (!info || !url)
return NULL;
info->protocol = strtok(strcpy((char*)malloc(strlen(url)+1), url), "://");
info->site = strstr(url, "://");
if (info->site)
{
info->site += 3;
char* site_port_path = strcpy((char*)calloc(1, strlen(info->site) + 1), info->site);
info->site = strtok(site_port_path, ":");
info->site = strtok(site_port_path, "/");
}
else
{
char* site_port_path = strcpy((char*)calloc(1, strlen(url) + 1), url);
info->site = strtok(site_port_path, ":");
info->site = strtok(site_port_path, "/");
}
char* URL = strcpy((char*)malloc(strlen(url) + 1), url);
info->port = strstr(URL + 6, ":");
char* port_path = 0;
char* port_path_copy = 0;
if (info->port && isdigit(*(port_path = (char*)info->port + 1)))
{
port_path_copy = strcpy((char*)malloc(strlen(port_path) + 1), port_path);
char * r = strtok(port_path, "/");
if (r)
info->port = r;
else
info->port = port_path;
}
else
info->port = "80";
if (port_path_copy)
info->path = port_path_copy + strlen(info->port ? info->port : "");
else
{
char* path = strstr(URL + 8, "/");
info->path = path ? path : "/";
}
int r = strcmp(info->protocol, info->site) == 0;
if (r && info->port == "80")
info->protocol = "http";
else if (r)
info->protocol = "tcp";
return info;
}
Test
int main()
{
URL_INFO info;
split_url(&info, "ftp://192.168.0.1:8080/servlet/rece");
printf("Protocol: %s\nSite: %s\nPort: %s\nPath: %s\n", info.protocol, info.site, info.port, info.path);
return 0;
}
Out
Protocol: ftp
Site: 192.168.0.1
Port: 8080
Path: /servlet/rece