今年國慶假期終于可以憋在家里了不用出門了,不用出去看后腦了,真的是一種享受。這么好的光陰怎么浪費,睡覺、吃飯、打豆豆這怎么可能(耍多了也煩),完全不符合我們程序員的作風,趕緊起來把文章寫完。
這篇文章比較基礎,在國慶期間的業(yè)余時間寫的,這幾天又完善了下,力求把更多的前端所涉及到的關于文件上傳的各種場景和應用都涵蓋了,若有疏漏和問題還請留言斧正和補充。
以下是本文所涉及到的知識點,break or continue ?
原理很簡單,就是根據 http 協議的規(guī)范和定義,完成請求消息體的封裝和消息體的解析,然后將二進制內容保存到文件。
我們都知道如果要上傳一個文件,需要把 form 標簽的enctype設置為multipart/form-data,同時method必須為post方法。
那么multipart/form-data表示什么呢?
multipart互聯網上的混合資源,就是資源由多種元素組成,form-data表示可以使用HTML Forms 和 POST 方法上傳文件,具體的定義可以參考RFC 7578。
multipart/form-data 結構
看下 http 請求的消息體
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDCntfiXcSkPhS4PN 表示本次請求要上傳文件,其中boundary表示分隔符,如果要上傳多個表單項,就要使用boundary分割,每個表單項由———XXX開始,以———XXX結尾。
每一個表單項又由Content-Type和Content-Disposition組成。
Content-Disposition: form-data 為固定值,表示一個表單元素,name 表示表單元素的 名稱,回車換行后面就是name的值,如果是上傳文件就是文件的二進制內容。
Content-Type:表示當前的內容的 MIME 類型,是圖片還是文本還是二進制數據。
解析
客戶端發(fā)送請求到服務器后,服務器會收到請求的消息體,然后對消息體進行解析,解析出哪是普通表單哪些是附件。
可能大家馬上能想到通過正則或者字符串處理分割出內容,不過這樣是行不通的,二進制buffer轉化為string,對字符串進行截取后,其索引和字符串是不一致的,所以結果就不會正確,除非上傳的就是字符串。
不過一般情況下不需要自行解析,目前已經有很成熟的三方庫可以使用。
至于如何解析,這個也會占用很大篇幅,后面的文章在詳細說。
使用 form 表單上傳文件
在 ie時代,如果實現一個無刷新的文件上傳那可是費老勁了,大部分都是用 iframe 來實現局部刷新或者使用 flash 插件來搞定,在那個時代 ie 就是最好用的瀏覽器(別無選擇)。
DEMO
這種方式上傳文件,不需要 js ,而且沒有兼容問題,所有瀏覽器都支持,就是體驗很差,導致頁面刷新,頁面其他數據丟失。
HTML
<form method="post" action="http://localhost:8100" enctype="multipart/form-data">
選擇文件:
<input type="file" name="f1"/> input 必須設置 name 屬性,否則數據無法發(fā)送<br/>
<br/>
標題:<input type="text" name="title"/><br/><br/><br/>
<button type="submit" id="btn-0">上 傳</button>
</form>
復制代碼
服務端文件的保存基于現有的庫koa-body結合 koa2實現服務端文件的保存和數據的返回。
在項目開發(fā)中,文件上傳本身和業(yè)務無關,代碼基本上都可通用。
在這里我們使用koa-body庫來實現解析和文件的保存。
koa-body 會自動保存文件到系統臨時目錄下,也可以指定保存的文件路徑。
然后在后續(xù)中間件內得到已保存的文件的信息,再做二次處理。
NODE
/**
* 服務入口
*/
var http = require('http');
var koaStatic = require('koa-static');
var path = require('path');
var koaBody = require('koa-body');//文件保存庫
var fs = require('fs');
var Koa = require('koa2');
var app = new Koa();
var port = process.env.PORT || '8100';
var uploadHost= `http://localhost:${port}/uploads/`;
app.use(koaBody({
formidable: {
//設置文件的默認保存目錄,不設置則保存在系統臨時目錄下 os
uploadDir: path.resolve(__dirname, '../static/uploads')
},
multipart: true // 開啟文件上傳,默認是關閉
}));
//開啟靜態(tài)文件訪問
app.use(koaStatic(
path.resolve(__dirname, '../static')
));
//文件二次處理,修改名稱
app.use((ctx) => {
var file = ctx.request.files.f1;//得道文件對象
var path = file.path;
var fname = file.name;//原文件名稱
var nextPath = path+fname;
if(file.size>0 && path){
//得到擴展名
var extArr = fname.split('.');
var ext = extArr[extArr.length-1];
var nextPath = path+'.'+ext;
//重命名文件
fs.renameSync(path, nextPath);
}
//以 json 形式輸出上傳文件地址
ctx.body = `{
"fileUrl":"${uploadHost}${nextPath.slice(nextPath.lastIndexOf('/')+1)}"
}`;
});
/**
* http server
*/
var server = http.createServer(app.callback());
server.listen(port);
console.log('demo1 server start ...... ');
復制代碼
CODE
https://github.com/Bigerfe/fe-learn-code/
要使用的是wkhtmltopdf的Python封裝——pdfkit
安裝
1. Install python-pdfkit:
$ pip install pdfkit
2. Install wkhtmltopdf:
$ sudo apt-get install wkhtmltopdf
sudo yum intsall wkhtmltopdf
brew install Caskroom/cask/wkhtmltopdf
使用
一個簡單的例子:
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
你也可以傳遞一個url或者文件名列表:
pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')
pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')
也可以傳遞一個打開的文件:
with open('file.html') as f:
pdfkit.from_file(f, 'out.pdf')
如果你想對生成的PDF作進一步處理, 你可以將其讀取到一個變量中:
# 設置輸出文件為False,將結果賦給一個變量
pdf = pdfkit.from_url('http://google.com', False)
你可以制定所有的 wkhtmltopdf 選項 http://wkhtmltopdf.org/usage/wkhtmltopdf.txt. 你可以移除選項名字前面的 '--' .如果選項沒有值, 使用None, False or * 作為字典值:
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'no-outline': None
}
pdfkit.from_url('http://google.com', 'out.pdf', options=options)
默認情況下, PDFKit 將會顯示所有的 wkhtmltopdf 輸出. 如果你不想看到這些信息,你需要傳遞一個 quiet 選項:
options = {
'quiet': ''
}
pdfkit.from_url('google.com', 'out.pdf', options=options)
由于wkhtmltopdf的命令語法 , TOC 和 Cover 選項必須分開指定:
toc = {
'xsl-style-sheet': 'toc.xsl'
}
cover = 'cover.html'
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)
當你轉換文件、或字符串的時候,你可以通過css選項指定擴展的 CSS 文件。
# 單個 CSS 文件
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# Multiple CSS files
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
你也可以通過你的HTML中的meta tags傳遞任意選項:
body = """
<html>
<head>
<meta name="pdfkit-page-size" content="Legal"/>
<meta name="pdfkit-orientation" content="Landscape"/>
</head>
Hello World!
</html>
"""
pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape
配置
每個API調用都有一個可選的參數。這應該是pdfkit.configuration()API 調用的一個實例. 采用configuration 選項作為初始化參數。可用的選項有:
示例 :針對wkhtmltopdf不在系統路徑中(不在$PATH里面)
PATH里面):
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf'))
pdfkit.from_string(html_string, output_file, configuration=config)
問題
IOError:'No wkhtmltopdf executable found':
確保 wkhtmltopdf 在你的系統路徑中(PATH), 會通過 configuration進行了配置 (詳情看上文描述)。 在Windows系統中使用where wkhtmltopdf命令 或 在 linux系統中使用 which wkhtmltopdf 會返回 wkhtmltopdf二進制可執(zhí)行文件所在的確切位置.
如果出現這個錯誤意味著 PDFKit不能處理一個輸入。你可以嘗試直接在錯誤信息后面直接運行一個命令來查看是什么導致了這個錯誤 (某些版本的 wkhtmltopdf會因為段錯誤導致處理失敗)
確保兩項:
1)、你的系統中有中文字體
2)、在html中加入
下面是我隨便寫的一個HTML表格:
<html>
<head><meta charset="UTF-8"></head>
<body>
<table width="400" border="1">
<tr>
<th align="left">Item....</th>
<th align="right">1</th>
</tr>
<tr>
<td align="left">衣服</td>
<td align="right">1.10</td>
</tr>
<tr>
<td align="left">化妝品</td>
<td align="right">.00</td>
</tr>
<tr>
<td align="left">食物</td>
<td align="right">0.40</td>
</tr>
<tr>
<th align="left">tOTAL</th>
<th align="right">01.50</th>
</tr>
</table>
</body>
</html>
下面是生成的PDF截圖
者:時蓬,王琴,白青江,范全林
中國科學院國家空間科學中心
空間科學與深空探測規(guī)劃論證中心
21世紀第三個十年開啟之際,中國嫦娥任務成為月球探測的亮點。
嫦娥四號2019年1月3日實現國際首次月背軟著陸以來,著陸器和“玉兔二號”月球車分別于2020年11月10日和11月9日結束月夜休眠,迎來第24月晝[1]。
今天上午(12月16日)9時15分,嫦娥五號軌道器和返回器組合體上兩臺25N發(fā)動機工作約8秒鐘,順利完成第二次月地轉移軌道修正,組合體上各系統狀態(tài)良好[2]。
目前,順利完成月球表面自動采樣,五星紅旗第一次月表動態(tài)展示,攜帶2 kg月球樣品的嫦娥五號返回器即將著陸,預計于12月17日凌晨降落于內蒙古四子王旗。
圖1 嫦娥五號月球鉆取采樣示意圖
展望未來10年國際月球探測,三個顯著趨勢值得關注:一是月球無人探索仍是主旋律,航天大國向月表長期駐留發(fā)展,多個新興航天國家則努力躋身月球俱樂部;二是載人登月重啟,是人類不滅的夢想;三是月球成為未來載人深空探索的前哨站和跳板。
月球無人探索仍是主旋律
中美俄引領月球探索向深度進軍
我國探月四期路線圖清晰
中國自啟動探月工程以來,按照“繞、落、回”三步走實施,最后的“回”是以“嫦娥五號”到月球正面取樣返回作為標志,它們構成了探月一到三期任務。
探月四期項目共論證了四次任務,其中“嫦娥四號”作為先導任務已經取得成功;為2030年前建設我國月球無人科研站,現已基本明確了三次任務,分別為“嫦娥六號”、“嫦娥七號”和“嫦娥八號”任務[3]。
“嫦娥六號”和“嫦娥七號”均計劃著陸于月球南極,具體著陸點選在月背還是正面,將根據“嫦娥五號”采樣情況來定。
“嫦娥六號”仍將采樣返回,“嫦娥七號”則將對月球的地形地貌、物質成分、空間環(huán)境進行一次綜合探測。
“嫦娥八號”除繼續(xù)進行科學探測外,還要進行一些關鍵技術的月面試驗,比如采用3D打印技術利用月壤建造基地等。
中國、美國、俄羅斯和歐洲等國家都在論證是否在月球建立科研基地或者科研站,我國希望通過“嫦娥八號”驗證部分技術,為各國未來共同建造月球科研基地開展前期探索[4][5]。
圖2 未來我國月球無人科研站基本型
美國主導建設訪問型空間站LOP-G
2020年4月2日,美國國家航空航天局(NASA)發(fā)布的《NASA月球持續(xù)探索和發(fā)展計劃》,描繪了阿爾忒彌斯計劃的思路,提出要在月球南極建一座“大本營”,組織一個四人小組前往LOP-G,重點發(fā)展機器人和載人任務結合的任務[6][7]。
LOP-G是基于國際空間站(ISS)框架,由NASA主導,ESA、俄羅斯國家航天集團公司(Roscosmos)、日本宇宙航空研發(fā)機構(JAXA)和加拿大航天局(CSA)等參與研發(fā)的近月空間站。
不同于長期有人照料的空間實驗室,LOP-G作為一個訪問型空間站,它將支持宇航員在月球軌道和月面上短期駐留,以及經月球中轉往返火星及深空,開展科學探索的同時,兼顧太空安全和商業(yè)航天等目標。
俄羅斯探月理想豐滿
俄羅斯圍繞月球探索與開發(fā)出臺了多項政策和計劃,其月球無人探測器為先遣任務,繼而開展載人登月,最終實現月球基地永久駐留,發(fā)展路線日漸清晰。
俄羅斯是目前唯一一個針對月球基地做出明確建設規(guī)劃的國家,它不僅有參與美國主導的LOP-G項目的意愿,而且也制定了本國月球軌道站計劃,為月球探索與開發(fā)領域可能率先取得重大突破奠定了基礎。
根據2019年2月Roscosmos和俄羅斯科學院(RAS)聯合制定的《月球綜合探索與開發(fā)計劃草案》[8],俄羅斯月球計劃周期為2019—2040年,每5年為一個實施階段,共4個階段。
圖3 俄羅斯月球計劃實施路線圖
第一階段(2019—2025年)計劃執(zhí)行“月球-25”(Luna-25)、“月球-26”(Luna-26)、“月球-27”(Luna-27)、“生物-M2”(Bion-M2)和“返回-MKA”(Vozvrat-MKA)等任務。
第二階段(2026—2030年)利用“月球-28”(Luna-28)實施月球極區(qū)土壤采樣返回。
第三階段(2031—2035年)全面開展月球科學實驗。
第四階段(2036—2040年)月球基地進入全面運行階段。
但時至今日各個規(guī)劃任務進展未達預期。
圖4 俄羅斯月球基地示意圖
ESA月球立方星競賽兩方案勝出
月球流星撞擊探測器(The Lunar Meteoroid Impact Observer, LUMIO)[9]是ESA SysNova月球立方星競賽的兩個獲勝概念之一,利用12U立方星探測可見光譜中的閃光,月背由于流星體撞擊導致的月閃現象,測繪流星體撞擊地圖,以期提高對過去和現在太陽系內流星體撞擊模式的理解,未來可發(fā)展成為月球預警系統[10]。
圖5 LUMIO概念圖
Lumio由意大利米蘭理工大學、荷蘭代爾夫特理工大學、瑞士洛桑聯邦理工學院、挪威科技公司、萊昂納多-芬梅卡尼卡股份公司和美國亞利桑那大學等機構共同開發(fā)[11]。
圖6 LUMIO 流星碰撞閃光探測原理示意圖
月球揮發(fā)物和礦物測繪軌道器(Volatile and Mineralogy Mapping Orbiter, VMMO)[12]是月球立方星競賽的另一個獲勝概念,亦是12U立方星。
VMMO將研究月球南極附近Shackleton撞擊坑內的永久陰影區(qū),測繪水冰地圖,探測其他揮發(fā)物的分布情況,測量月球輻射,并建立輻射環(huán)境模型,幫助開發(fā)后續(xù)任務硬件,支持載人探索任務[13]。
VMMO由MPB通信公司、英國薩里空間中心、加拿大溫尼伯大學和Lens研發(fā)公司等機構共同開發(fā)。
圖7 VMMO任務示意圖
多個航天國家躋身月球俱樂部
月球作為深空探測的試驗場和載人深空探索的前哨站,吸引了全球航天國家的高度關注,除中美俄航天大國外,印度、英國等新興航天國家也紛紛出手,或夯實自己月球俱樂部會員身份,或努力躋身月球俱樂部。
印度月船3號任務推遲至2021年實施
2020年7月,印度空間研究組織(ISRO)主席K Sivan指出,印度第三次探月任務有關的所有活動都在順利進行[14]。
月船3號(Chandrayaan-3)推遲到2021年上半年發(fā)射[15],旨在實現月球軟著陸,包括著陸器、巡視器和推進模塊,與月船2號(Chandrayaan-2)任務的主要區(qū)別在于不包括軌道器。
圖8 月船3號概念圖
印度的首個載人航天項目Gaganyaan也將在2020年年底全面啟動,計劃于2022年發(fā)射,搭載航天員繞地球軌道運行7天后返回地球。
原計劃于2020年12月的無人駕駛飛船任務因新冠疫情等原因推遲。
英國努力躋身月球俱樂部
英國私營公司Spacebit計劃于2021年7月發(fā)射該國第一臺月球車,以期使英國成為繼美俄中之后,第四個完成此成就的國家。
僅1.5 kg的朝云蜘蛛月球車(朝の,Asagumo)將是史上最輕的月球車,其獨特特點是有四條腿,外形酷似蜘蛛,不再是輪式[16]。
月球曾經經歷火山活躍時期,噴發(fā)的熔巖在流動過程中頂層逐漸冷卻,成為堅硬的巖石,下層熔巖流干或凝固后形成熔巖洞。
熔巖洞沒有巖屑,是崎嶇不平的巖石,適合這種腿形月球車攀上爬下,可為未來人類在月球熔巖洞建設永久基地做準備。
圖9 朝云蜘蛛月球車示意圖
另外,月球探路者衛(wèi)星(Lunar Pathfinder)由英國的薩里衛(wèi)星科技公司(Surrey Satellite Technology Limited)研制,將是首個提供高性能、有價格競爭力的地月間通信服務的商業(yè)繞月軌道器[17]。
圖10 月球探路者示意圖
月球探路者的第一個客戶是ESA,并期望NASA成為其下一個大客戶,為美國重返月球提供地月通信服務。
月球探路者將于2023年中后期全面投入商用服務,預計壽命8年。
該任務成功后,下一步還將發(fā)射更多月球衛(wèi)星,組建月球版的GPS系統。
圖11 月球探路者中繼通信工作示意圖[17]
日本表達未來繼續(xù)探月的愿望
2020年7月,日本文部科學省(MEXT)大臣Hagiuda Koichi與NASA局長布萊登斯汀(James Bridenstine)共同簽署月球聯合探測意向,提出美日兩國將共享阿爾忒彌斯計劃目標[18],使日本航天員進入LOP-G和登陸月球。
JAXA的月球探測智能著陸器(Smart Lander for Investigating Moon)和月球極區(qū)探測任務(Lunar Polar Exploration mission)上將搭載NASA載荷,NASA月球探測任務上也同樣會搭載JAXA的載荷,雙方共享探測數據。
圖12 JAXA的月球探測智能著陸器概念圖
以色列欲繼續(xù)未竟的探月任務
以色列首次登月任務“創(chuàng)世紀號”(Beresheet)月球著陸器,2019年4月軟著陸失敗在月表墜毀。
非營利組織SpaceIL宣布了第二次登月任務“創(chuàng)世紀2號”[19],多名私人投資者已表明為該任務提供資金的意向。
以色列也在爭取成為第四個成功登陸月球的國家,側面反映出某些航天國家月球探索的激烈競爭。
圖13 創(chuàng)世紀號月球探測器
載人登月是人類不滅的夢想
中國和美國都有在未來載人登月的計劃,擬在十年內將航天員送至月表進行科學探測。
當然,載人登月不是空間探索的終點,月球只是人類的跳板,目標還將人類送往火星及以遠。
圖 14 1969年11月20日,阿波羅12號艙外活動照片,后方是阿波羅12號登月艙,前面美國的勘測者3號,當時宇航員Charles Conrad Jr.和Alan L. Bean協作拆卸勘測者3號探測相機和零部件[20]
美國重返月球是阿爾忒彌斯第一階段任務的核心
NASA發(fā)布的《前往月球:NASA月球探索戰(zhàn)略規(guī)劃》報告[21],介紹了阿爾忒彌斯載人月球探索計劃框架及主要內容。
該計劃的第一階段目標是按照特朗普總統要求,2024年前將美國航天員送至月表,踏足迄今無人造訪的月球南極,終極目標是將人類送往火星。
主要工作包括:利用“空間發(fā)射系統”(SLS)和“獵戶座”(Orion)飛船執(zhí)行3次阿爾忒彌斯任務,即2020年的“阿爾忒彌斯-1”無人飛行測試,2022年的“阿爾忒彌斯-2”載人飛行測試和2024年的“阿爾忒彌斯-3”載人登月任務。
圖15 Artemis計劃中宇航員在月表探測的概念圖
特朗普政府一直呼吁在未來五年內增加對NASA的資助,以推動該機構的Artemis計劃。
據悉,該項目旨在將首位女性和下一位男性送上月球表面。
最初計劃在2028年首次著陸,但政府要求將時間提早至2024年。NASA已經明確表示,為了趕上更緊迫的最后期限,有必要大幅增加預算。
在2020年11月份,美參議院撥款委員會公布了下一年的12項撥款法案,新法案將向NASA撥款總計235億美元,其中撥款10億美元用于建造新的月球著陸器,但這比NASA的預算申請少了約24億美元[22]。
美國總統換屆導致航天政策的微調,以及資金短缺等原因,可能會推遲首位女性2024年登月計劃的實現。
我國啟動論證載人登月
嫦娥五號任務,可以看作十年后中國載人登月的預演。
嫦娥五號任務中分離和對接,與美國阿波羅計劃載人登月的技術類似。
從2020年到2030年或2035年,我國將在10-15年的時間內遵循無人月球科研站基本型——載人登月——短期有人/無人月球科研站的路線,實現月球的開發(fā)。
然后用10年左右的時間,也就是在接近建國100周年時,建成綜合型的月球基地[23]。
月球是載人登火的前哨站
圖16 LOP-G示意圖
如前文所述,NASA主導的LOP-G以載人火星探測為最終目標,并在LOP-G建成后,于2030年前進一步建設深空運輸系統(DST),為2030年代中期實施載人火星探測任務奠定基礎[24]。
圖17 月球是載人登火的前哨站示意圖
在載人登月、載人登火正在引發(fā)全球航天熱潮之際,中國也形成了具有自身特色的航天經濟、航天技術和航天文化,面向未來載人月球與火星探測任務,提出了以遠軌太空港DRO軌道站為基礎的近地軌道以遠的航天發(fā)展戰(zhàn)略。
圖18 遠軌太空港為基礎的近地軌道示意圖
浩瀚太空,月球探索是起點,也是各國實行太陽系行星探索和載人火星等深空任務不可或缺的關鍵環(huán)節(jié)。
未來10年月球探測任務值得關注。
參考文獻
[1].http://www.clep.org.cn/n5982064/c6810467/content.html
[2].http://www.clep.org.cn/n5982341/c6810860/content.html
[3]. 邱家穩(wěn), 王強, 馬繼楠. 深空探測技術[J]. 紅外與激光工程, 2020, 49(05): 9-18.
[4]. 景驄. “嫦娥五號”年底飛,后續(xù)相關規(guī)劃首次公開[J]. 太空探索, 2019(03): 5.
[5]. 火星、小行星、木星系及行星穿越中國“深空天路”展望2030年[J]. 科學家, 2017, 5(19): 90-91.
[6]. 王琴, 范全林, 張曉雯. 美國月球軌道空間站建設啟動實質研發(fā)[J]. 國際太空, 2019(04): 17-22.
[7]. 中俄歐航天局初步達成共識,將聯合開展國際月球科研站論證[J]. 華東科技, 2019(08): 14.
[8]. 范唯唯, 楊帆, 韓淋, 王海名. 俄羅斯未來月球探索與開發(fā)計劃解析[J]. 科技導報, 2019, 37(16): 6-11.
[9].https://www.esa.int/Enabling_Support/Space_Engineering_Technology/CubeSats_for_hunting_secrets_in_lunar_darkness
[10].https://directory.eoportal.org/web/eoportal/satellite-missions/content/-/article/lumio
[11].https://www.tudelft.nl/en/2020/lr/the-lumio-mission-a-cube-sat-watches-meteoroid-impacts-on-the-far-side-of-the-moon/
[12].https://meetingorganizer.copernicus.org/EGU2020/EGU2020-22678.html?pdf
[13].http://epubs.surrey.ac.uk/849054/1/__homes.surrey.ac.uk_home_.System_Desktop_ICES_2018_227.pdf
[14]. https://www.oneindia.com/india/isro-2020-target-set-to-launch-cost-effective-chandrayaan3-gaganyaan-3006598.html
[15].https://indianexpress.com/article/technology/science/chandrayaan-3-launch-date-isro/
[16].https://spacebit.com/
[17].https://www.sstl.co.uk/what-we-do/lunar-mission-services/lunar-pathfinder
[18].https://www.mext.go.jp/content/20200714-mxt_uchukai02-000008680_1.pdf
[19].https://www.timesofisrael.com/spaceil-chief-beresheet-2-starts-tomorrow-well-put-our-flag-on-the-moon/
[20].https://solarsystem.nasa.gov/resources/821/apollo-12-and-surveyor-3/
[21].https://www.nasa.gov/sites/default/files/atoms/files/america_to_the_moon_2024_artemis_20190523.pdf
[22].https://oig.nasa.gov/docs/IG-21-004.pdf
[23].https://new.qq.com/omn/20201201/20201201A01JRJ00.html
[24].https://nvite.jsc.nasa.gov/presentations/b2/D1_Mars_Connolly.pdf
來源:科技導報
來源: 國家空間科學中心
*請認真填寫需求信息,我們會在24小時內與您取得聯系。