django文件上傳與下載
Ⅰ 如何使用django restfulframework 實現文件上傳
給你一個我的代碼:
首先需要用下面的裝飾器把POST數據的解析器改為MultiPartParser,其中picture的file欄位是個FieField或者它的子類。
python">@api_view(['POST'])
@parser_classes((MultiPartParser,))
defupload_picture(request):
if"file"inrequest.FILES:
f=request.FILES["file"]
picture=Picture()
picture.file=f
picture.save()
returnResponse(data={"id":picture.id})
Ⅱ django實現文件上傳到伺服器
response = requests.post(PATH, data={'document_name': document_path, 'file': base64.b64encode(file.read())}) 這個方法其實就是將文件信息和轉成base64的文件發到伺服器那邊,那邊就是以下的方法存入伺服器
文件存入本地的方法
Ⅲ Python的文件上傳
Python中使用GET方法實現上傳文件,下面就是用Get上傳文件的例子,client用來發Get請求,server用來收請求。
請求端代碼:
importrequests#需要安裝requests
withopen('test.txt','rb')asf:
requests.get('http://伺服器IP地址:埠',data=f)
服務端代碼:
varhttp=require('http');
varfs=require('fs');
varserver=http.createServer(function(req,res){
//console.log(req);
varrecData="";
req.on('data',function(data){
recData+=data;
})
req.on('end',function(data){
recData+=data;
fs.writeFile('recData.txt',recData,function(err){
console.log('filereceived');
})
})
res.end('hello');
})
server.listen(埠);
Ⅳ Django上傳原理求解
隨著網站運作,難免有些時候需要上傳文件。上傳文件自然是上傳到網站所在的伺服器,日積月累,慢慢地網站存儲空間越來越少。而且網站遷移和備份都不方便,使用這些資源時也佔用大量伺服器流量。
較好的解決方案是使用第三方存儲伺服器,例如七牛、阿里雲OSS、亞馬遜S3等。將文件都放到這些存儲伺服器,可以減少伺服器負擔。伺服器只剩下必要的靜態文件和代碼。
以阿里雲OSS為例,講解如何使用第三方存儲伺服器。(剛好最近用到這個,而且Django有其他人寫好的第三方庫)
首先,需要擁有OSS。這個去阿里雲購買即可。購買之後可得到密鑰等一系列信息。
接著,安裝oss2庫,該庫是Python對應oss的操作庫。
這樣設置,點擊文件鏈接,即可下載並且下載文件名是上傳的文件名。若你不是什麼類型文件都需要這么處理,可以判斷filename的後綴名加以處理。
Ⅳ python+django上傳圖片和視頻方法一樣嗎
如果是短視頻,不超過django中限制的文件上傳位元組,那麼就可以一樣上傳,如果上傳的視頻容量大於django中的限制,可以考慮使用文件流式傳輸下載。
Ⅵ django上傳文件到遠程伺服器,怎麼整
使用的是WebClient而不是ftp
首先,我們先來定義一個類UpLoadFile,這個類就是文件上傳類。代碼如下:
public void UpLoadFile(string fileNamePath, string uriString, bool IsAutoRename)
{
int indexOf = 0;
if (fileNamePath.Contains(@"\"))
{
indexOf = fileNamePath.LastIndexOf(@"\");
}
else if (fileNamePath.Contains("/"))
{
indexOf = fileNamePath.LastIndexOf("/");
}
string fileName = fileNamePath.Substring(indexOf + 1);
string NewFileName = fileName;
if (IsAutoRename)
{
NewFileName = DateTime.Now.ToString("yyMMddhhmmss") + DateTime.Now.Millisecond.ToString() + fileNamePath.Substring(fileNamePath.LastIndexOf("."));
}
string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
if (uriString.EndsWith("/") == false) uriString = uriString + "/";
uriString = uriString + NewFileName;
/// 創建WebClient實例
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
// 要上傳的文件
FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
//FileStream fs = OpenFile();
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(uriString, "PUT");
try
{
//使用UploadFile方法可以用下面的格式
//myWebClient.UploadFile(uriString,"PUT",fileNamePath);
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
postStream.Close();
fs.Dispose();
}
else
{
postStream.Close();
fs.Dispose();
}
}
catch (Exception err)
{
postStream.Close();
fs.Dispose();
throw err;
}
finally
{
postStream.Close();
fs.Dispose();
}
}
好了,定義好這個類之後就看我們怎麼調用它了。在這里我給出一個例子:
單擊某個按鈕事件:
private void center_Click(object sender, EventArgs e)
{
//上傳文件
//得到文件名,文件擴展名,伺服器路徑
string filePath = filename.Text; //需要上傳的文件,在這里可以根據需要採用OpenFileDialog來獲取文件
string server = @"http://www.thylx.com/」; //上傳路徑
//創建webclient實例
WebClient myWebClient = new WebClient();
try
{
//使用Uploadfile方法上傳
UpLoadFile(filePath, server, true);
MessageBox.Show("上傳成功", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
Ⅶ django文件上傳的時候怎麼能加一個上傳進度的顯示
首先需要一個表單來讓用戶選擇要上傳的文件。
1 <form id="form_upload" action="/upload" method="POST">
2 <input type="file" name="picture" id="picture" />
3 <input type="hidden" id="X-Progress-ID" name="X-Progress-ID" value=""/>
4 <input type="hidden" id="id" name="id" value=""/>
5 <input id="form_submit_button" class="tp-button" type="submit" value="Submit" />
6 </form>
這里增加了兩個隱藏的輸入框,第一個是 『X-Progress-ID』,代表上傳 ID,這樣我們才能夠在伺服器端支持並發的上傳請求。稍後我們會看到,伺服器是如何處理這個值的。
然後還有一個隱藏輸入框 『id』,在我們的例子里代表菜品的編號。
我們將使用 Ajax 來發送 POST 請求,這樣表單便可以很好地集成在現代的網路界面中,同時包含一個進度條。我們打算使用 jQuery Form plugin 來實現這一點。
函數 ajaxSubmit() 將會幫我們搞定一切。
為上傳 ID 生成一個隨機字串,並用它設置輸入框的值。
需要指定一個用於上傳請求的 URL 和兩個回調函數:一個在請求前調用,另一個在請求完成後調用。
1 $('#X-Progress-ID').val('random string');
2 var options = {
3 dataType: 'xml',
4 url: '/upload?X-Progress-ID='+$('#X-Progress-ID').val(),
5 beforeSubmit: showRequest,
6 success: showResponse
7 }
8 $('#form_upload').ajaxSubmit(options);
showRequest 回調函數只需要像下面這么簡單就行了:
1 function showRequest(formData, jqForm, options) {
2 // do something with formData
3 return True;
4 }
在 showResponse 函數中,我們需要處理響應,並對它進行操作。在我的例子里,我處理了伺服器返回的帶有狀態值的 xml。
1 function showResponse(response) {
2 // do something with response
3 }
用戶按下提交的時候,我們希望顯示一個進度條,因此可以使用下面的 JS 代碼,向表單添加進度條。progressBar() 方法是 jQuery progress bar plugin 的一部分。
1 $('#form_upload').find('#form_submit_input').append('<span id="uploadprogressbar"></span<');
2 $('#form_upload').find('#uploadprogressbar').progressBar();
現在我們需要添加一個每隔幾秒運行一次的函數,來從伺服器獲取上傳進度,並相應地更新進度條。
為此,我們使用 setInterval() 向伺服器發出一個 GET 請求,獲取 JSON 格式的進度值。我們向伺服器傳送上傳 ID。當返回 null 值的時候,就可以知道上傳已經結束。
01 function startProgressBarUpdate(upload_id) {
02 $("#uploadprogressbar").fadeIn();
03 if(g_progress_intv != 0)
04 clearInterval(g_progress_intv);
05 g_progress_intv = setInterval(function() {
06 $.getJSON("/get_upload_progress?X-Progress-ID="
07 + upload_id, function(data) {
08 if (data == null) {
09 $("#uploadprogressbar").progressBar(100);
10 clearInterval(g_progress_intv);
11 g_progress_intv = 0;
12 return;
13 }
14 var percentage = Math.floor(100 * parseInt(data.uploaded) / parseInt(data.length));
15 $("#uploadprogressbar").progressBar(percentage);
16 });