![](/img/trans.png)
[英]C# File Upload via POST REST API in a Self-Hosted Web Server Environment
[英]Bulk upload via REST api
我的目標是將約3000條記錄的產品CSV上傳到我的電子商務網站。 我想利用我的電子通訊平台提供的REST API,這樣我就可以重用某些東西,並在以后可能創建的網站上使用。
我遇到的主要問題是: -System.Threading.ThreadAbortException
我只能將其歸因於通過POST請求處理所有3K記錄所花費的時間。 我的代碼:
public ActionResult WriteProductsFromFile()
{
string fileNameIN = "19107.txt";
string fileNameOUT = "19107_output.txt";
string jsonUrl = $"/api/products";
List<string> ls = new List<string>();
var engine = new FileHelperAsyncEngine<Prod1>();
using (engine.BeginReadFile(fileNameIN))
{
foreach (Prod1 prod in engine)
{
outputProduct output = new outputProduct();
if (!string.IsNullOrEmpty(prod.name))
{
output.product.name = prod.name;
string productJson = JsonConvert.SerializeObject(output);
ls.Add(productJson);
}
}
}
foreach (String s in ls)
nopApiClient.Post(jsonUrl, s);
return RedirectToAction("GetProducts");
}
}
由於我是網絡編碼的新手,所以我會以錯誤的方式進行操作嗎? 有沒有我沒有遇到過的首選的批量上傳方法?
我嘗試使用TaskCreationOptions.LongRunning標志,該標志可以稍有幫助,但不能使我接近目標。
Web和api控制器操作並不打算執行長期運行的任務-除了鎖定UI /線程外,您還將引入一系列失敗的機會,而這些失敗的機會很少。
但是您在這里有很多選擇並不都是壞事,關於異步/雲架構的文獻很多-解釋了如何處理文件和這種情況。
您要做的是從API請求中斷開文件處理(在您的應用程序中不是第三方)
這將需要更多的工作,但最終將創建一個更可靠的應用程序。
第1步:
立即將文件拖放到磁盤上-我看到您已經在DISK上擁有該文件,但不確定如何到達該文件,但是無論哪種方式,它都可以正常工作。
第2步:
使用運行方式為
-控制台應用程序(最簡單)
-服務(需要某種服務的安裝/卸載)
-甚至是您的網絡應用中的一個線程(但是您將很難知道它何時會失敗)
無論選擇哪種方式,該過程都會監視目錄中文件的更改,發生更改時,它將啟動您的方法來根據您的喜好愉快地處理文件。
在這里查看FileSystemWatchers是一個基本示例: https : //www.dotnetperls.com/filesystemwatcher
另外:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.