文主要講解移動端頁面上能上傳多個本地圖片的例子,在一些發(fā)布說說的頁面上能用得到,有興趣的小伙伴可以一起看看!
效果圖:
html:
css:
css樣式方面就不多說了,自己可以美化自己的布局,重點還是js中的實現(xiàn)代碼:如下
JavaScript中,您可以使用HTML5的<input type="file">元素來實現(xiàn)圖片上傳功能。
以下是一個簡單的示例代碼,演示如何在JavaScript中上傳圖片:
HTML部分:
<input type="file" id="uploadInput">
<button onclick="uploadImage()">上傳圖片</button>
JavaScript部分:
function uploadImage() {
var fileInput = document.getElementById('uploadInput');
var file = fileInput.files[0];
if (file) {
var formData = new FormData();
formData.append('image', file);
// 發(fā)送圖片數(shù)據(jù)到服務器
// 這里可以使用XMLHttpRequest或fetch等方法發(fā)送請求
// 請根據(jù)您的需求選擇適當?shù)姆椒? // 示例中使用XMLHttpRequest發(fā)送POST請求
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.onload = function() {
if (xhr.status === 200) {
// 上傳成功
console.log('圖片上傳成功');
} else {
// 上傳失敗
console.log('圖片上傳失敗');
}
};
xhr.send(formData);
}
}
API部分:
[HttpPost]
[RequestSizeLimit(5242880)]
public async Task<APIResult> upload(IFormCollection collection)
{
APIResult rtn = new APIResult();
if (collection == null)
{
rtn.code = -100;
rtn.msg = "圖片列表為空";
return rtn;
}
else
{
try
{
string file_path = "";
// 預處理 用戶參數(shù):用戶指定子路徑
string userPath = DateTime.Now.ToString("yyyy-MM-dd");
if (collection.ContainsKey("path"))
{
collection.TryGetValue("path", out Microsoft.Extensions.Primitives.StringValues val);
if (!val.Equals("undefined"))
{
userPath = val.ToString();
}
}
// 預處理 文件路徑
// 注意:這里可能會根據(jù)不同的環(huán)境來 修改 路徑前面是否需要添加 /
// 當發(fā)現(xiàn)上傳不成功,目錄無法創(chuàng)建時,可以嘗試修改這里
file_path = $"upload/imgs/{userPath}/";
var uploadPath = Path.Combine(_webHostEnvironment.WebRootPath, file_path);
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
// 處理文件
FormFileCollection filelist = (FormFileCollection)collection.Files;
foreach (IFormFile file in filelist)
{
// 保存文件到磁盤
string name = file.FileName;
string FilePath = Path.Combine(uploadPath, name);
string type = Path.GetExtension(name);
using (var stream = System.IO.File.Create(FilePath))
{
await file.CopyToAsync(stream);
};
// 保存文件信息到表
Sys_File f = new Sys_File();
f.code = "image";
f.name = name;
f.file_type = type.Trim('.');
f.file_group = userPath;
f.file_path = $"/{file_path}{name}";
f.is_active = true;
f.memo = "";
f.createTime = DateTime.Now;
using (var dbctx = DBHelper.db)
{
await dbctx.AddAsync(f);
await dbctx.SaveChangesAsync();
};
// 返回消息,包含文件路徑
rtn.datas = $"/{file_path}{name}";
rtn.code = 100;
rtn.msg = "文件已保存!";
}
}
catch (Exception ex)
{
rtn.code = -200;
rtn.msg = "圖片保存失敗!";
Log4NetUnit.Instance.Log.Error("圖片保存失敗:" + ex.Message);
}
return rtn;
}
}
在這個示例中,我們首先在HTML中創(chuàng)建了一個<input type="file">元素,用于選擇要上傳的圖片。
然后,我們在JavaScript中編寫了一個uploadImage函數(shù),該函數(shù)在點擊"上傳圖片"按鈕時觸發(fā)。
在uploadImage函數(shù)中,我們首先獲取到<input>元素,并從中獲取到用戶選擇的圖片文件。
然后,我們創(chuàng)建一個FormData對象,并將圖片文件添加到其中。
接下來,我們可以使用XMLHttpRequest或fetch等方法將圖片數(shù)據(jù)發(fā)送到服務器。
在示例中,我們使用XMLHttpRequest發(fā)送了一個POST請求,將圖片數(shù)據(jù)作為FormData發(fā)送到/upload端點。
您需要根據(jù)您的實際情況修改URL和請求方法。
當請求完成時,我們可以根據(jù)響應的狀態(tài)碼來判斷上傳是否成功。
在示例中,如果狀態(tài)碼為200,則表示上傳成功,否則表示上傳失敗。
請注意,由于安全性限制,JavaScript無法直接訪問用戶的文件系統(tǒng)。
因此,用戶必須手動選擇要上傳的文件。
文本插件TINYMCE使用CTRL+V粘貼圖片上傳到遠程服務器
最近項目中有一個需求,需要在編輯器增加Word內容一鍵粘貼的功能,粘貼后能夠自動將Word中的圖片上傳到服務器中,并且保留Word文檔中的文本樣式,比如顏色,字體,字體大小,表格等。粘貼操作要求支持快捷鍵操作(Ctrl + V),Web編輯器使用的TinyMCE5
用戶每天需要發(fā)布新聞,新聞都是由編輯寫好,保存在Word文檔中,之前發(fā)的時候圖片處理比較麻煩,都是一張張上傳,效率比較低,現(xiàn)在希望能夠批量自動上傳,提高工作效率。
希望在現(xiàn)有的后臺管理系統(tǒng)中直接集成到現(xiàn)有的編輯器(tinymce)中,做成一個按鈕,用戶點擊按鈕后就能粘貼,圖片自動上傳。操作盡量簡單,用戶體驗盡量的好用。
?
網(wǎng)上搜了一下,基本上大部分文章講的都是用VUE+HTML5來實現(xiàn)的。我們實際測試后發(fā)現(xiàn)這種方案局限性比較大,而且兼容性也不夠好,在有些電腦上不行,有些客戶電腦又行,暫時找不到原因,開源方案也沒人聯(lián)系,沒有任何技術支持,所以放棄。圖片是轉成了BASE64上傳,與原始圖片相比尺寸更大些,應該是自動轉換時出了問題,清晰度也有下降。
?
找了幾個星期最終只找到了一個最符合需求的插件:澤優(yōu)Word一鍵粘貼控件(WordPaster),實際測試后發(fā)現(xiàn)效果還不錯基本能夠滿足需求。提供了完整的示例代碼,整合教程和視頻教程,集成起來也非常的方便,用戶體驗做的也很好。
?
項目組建議最好能夠以插件方式進行使用,這樣集成升級后期維護更方便,前端沒有使用VUE框架,而是HTML+JS。用戶希望直接集成到編輯器(UEditor)中,在工具欄中提供一個按鈕,點擊按鈕后就能粘貼,圖片自動上傳。這樣的用戶體驗是最好的
?
另外一點就是希望穩(wěn)定可靠,因為用的人比較多,幾乎每天都會使用,使用頻繁也很高,出了問題就比較影響工作效率。客戶那邊要求提供手機和微信需要技術支持。
?
上面的幾點能夠滿足的話基本就沒有什么問題,領導希望最好提供OEM或者買斷的采購方式,因為我們是軟件公司,也是專門做政府單位項目,客戶比較多,領導希望能夠買斷集成在我們自己的產(chǎn)品中,這樣就能夠為所有用戶提供這個功能,用戶體驗也能夠統(tǒng)一。主要是領導不想每次都要單獨采購,太麻煩了。
?
示例下載:
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。