허진호

Merge branch 'dev' of https://github.com/jh8579/fileshell_cloudcomputing into dev

# Conflicts:
#	fileshell/models.py
#	fileshell/settings.py
#	fileshell/urls.py
#	fileshell/views.py
#	templates/base.html
......@@ -10,6 +10,7 @@ class File(models.Model):
fileSize = models.IntegerField()
folder = models.ForeignKey('Folder', null=True, blank=True, related_name='datas', on_delete=models.CASCADE,)
class Folder(models.Model):
dir_name = models.CharField(max_length=30)
user = models.CharField(max_length=20, default='')
......
......@@ -39,7 +39,11 @@ class MediaStorage(S3Boto3Storage):
ExpiresIn=100)
return url
def delete_file(file_name, dir):
def delete_file(dir):
client = boto3.resource('s3')
client.Bucket(AWS_STORAGE_BUCKET_NAME).objects.filter(Prefix=dir).delete()
def delete_folder(dir):
client = boto3.resource('s3')
client.Bucket(AWS_STORAGE_BUCKET_NAME).objects.filter(Prefix=dir).delete()
......
......@@ -29,6 +29,7 @@ urlpatterns = [
url(r'^download/(?P<bucketPath>.+)//(?P<filename>.+)//(?P<dir>.+)$', views.download, name='download'), ## 다운로드 기능
url(r'^delete/(?P<bucketPath>.+)//(?P<filename>.+)//(?P<dir>.+)$', views.delete, name='delete'), ## 삭제 기능
url(r'^delete_folder/(?P<foldername>.+)$', views.delete_folder, name='delete_folder'),
url(r'^changeFavor/(?P<bucketPath>.+)/(?P<filename>.+)$', views.changeFavor, name='changeFavor'), ## 즐겨찾기 on/off 기능
url('add_folder/', views.add_folder, name='add_folder'), ## 폴더 추가 기능
url('signup/', views.signup, name='signup'), ## 회원가입 기능
......
......@@ -10,7 +10,6 @@ import datetime
def home(request):
# user가 로그인 되어 있을 때
if request.user.is_authenticated:
# user가 갖고 있는 파일 중 즐겨찾기 True인 파일 필터링
......@@ -18,7 +17,7 @@ def home(request):
# user가 갖고 있는 파일 중 일주일 안에 다운로드 된 파일 필터링
endTime = datetime.datetime.now()
startTime = endTime - datetime.timedelta(days=1) # 최근 날짜 기준 (현재: 3일)
startTime = endTime - datetime.timedelta(days=1) # 최근 날짜 기준 (현재: 1일)
recentList = File.objects.filter(last_view_TM__range=[startTime, endTime], user=request.user.username)
return render(request, 'home.html', {'favorList': favorList, 'recentList': recentList})
......@@ -26,8 +25,8 @@ def home(request):
else:
return render(request, 'login.html')
def file(request):
def file(request):
# user가 로그인 되어 있을 때
if request.user.is_authenticated:
pass
......@@ -35,7 +34,6 @@ def file(request):
else:
return redirect('/')
this_path = request.path
dir = this_path[1:]
......@@ -50,8 +48,8 @@ def file(request):
return render(request, 'file.html', {'folderList': folderList, 'fileList': fileList})
def search(request, search_name):
def search(request, search_name):
# user가 로그인 되어 있을 때
if request.user.is_authenticated:
pass
......@@ -59,7 +57,6 @@ def search(request, search_name):
else:
return redirect('/')
this_path = request.path
dir = this_path[1:]
......@@ -68,7 +65,6 @@ def search(request, search_name):
type = type.pop(0)
print(type)
name = request
print(name)
# user가 갖고 있는 폴더 중 현재 url을 parent로 갖는 폴더 필터링
......@@ -78,18 +74,18 @@ def search(request, search_name):
return render(request, 'search.html', {'folderList': folderList, 'fileList': fileList})
def profile(request):
def profile(request):
# 유저 정보 출력
return render(request, 'profile.html')
def account_login(request):
def account_login(request):
# 로그인 화면 출력
return render(request, 'login.html')
def signup(request):
def signup(request):
# requst가 POST일 때
if request.method == "POST":
# user 폼 지정
......@@ -120,11 +116,10 @@ def signup(request):
# home 화면으로 이동(로그인 화면)
return redirect('/')
def add_folder(request):
def add_folder(request):
# requst가 POST일 때
if request.method == 'POST':
## 파일 model 변수 초기화
user = request.user.username
dir_name = request.POST.get('dir_name')
......@@ -133,12 +128,13 @@ def add_folder(request):
parent = Folder.objects.get(dir_name=dir, user=user)
# 로컬 DB에 저장
Folder.objects.create(dir_name=dir+dir_name+'/', parent=parent, user=user)
Folder.objects.create(dir_name=dir + dir_name + '/', parent=parent, user=user)
# s3 main bucket에 dir/ 디렉토리에 dir_name/ 디렉토리 생성
MediaStorage.create_dir(user + '/' +dir + dir_name)
MediaStorage.create_dir(user + '/' + dir + dir_name)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def upload(request):
if request.method == 'POST':
print(request.FILES)
......@@ -156,7 +152,7 @@ def upload(request):
folder = Folder.objects.get(dir_name=dir, user=request.user.username)
# 로컬 DB에 저장
File.objects.create(title=title, user=user, isFavor=False, bucketPath=user_name+'/'+dir,
File.objects.create(title=title, user=user, isFavor=False, bucketPath=user_name + '/' + dir,
fileSize=filesize, folder=folder)
# s3 버킷에 저장
MediaStorage.upload_file(filedata, user, dir)
......@@ -164,8 +160,8 @@ def upload(request):
pass
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def download(request, bucketPath, filename, dir):
def download(request, bucketPath, filename, dir):
# 경로와 이름이 같은 파일을 필터링
#### 같은 이름을 가진 파일에 경우 겹칠 수 있음 ####
......@@ -180,8 +176,8 @@ def download(request, bucketPath, filename, dir):
return HttpResponseRedirect(url)
def delete(request, bucketPath, filename, dir):
def delete(request, bucketPath, filename, dir):
# 경로와 이름이 같은 파일을 필터링
#### 같은 이름을 가진 파일에 경우 겹칠 수 있음 ####
......@@ -189,12 +185,12 @@ def delete(request, bucketPath, filename, dir):
File.objects.filter(title=filename, bucketPath=dir).delete()
# s3에서 해당 파일을 정해진 경로로 삭제
MediaStorage.delete_file(filename, bucketPath)
MediaStorage.delete_file(bucketPath)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def changeFavor(request, bucketPath, filename):
def changeFavor(request, bucketPath, filename):
# 경로와 이름이 같은 파일을 필터링
#### 같은 이름을 가진 파일에 경우 겹칠 수 있음 ####
......@@ -206,15 +202,38 @@ def changeFavor(request, bucketPath, filename):
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def delete_ff(foldername, username):
if Folder.objects.filter(parent__dir_name=foldername, user=username).exists(): # 자식 폴더가 존재할 경우
folderList = Folder.objects.filter(parent__dir_name=foldername, user=username).all()
for i in folderList:
delete_ff(i.dir_name, username) # 자식 폴더 삭제
if File.objects.filter(folder__dir_name=foldername, user=username).exists(): # 해당 폴더에 파일이 존재하는 경우
File.objects.filter(folder__dir_name=foldername, user=username).delete()
Folder.objects.filter(dir_name=foldername, user=username).delete() # 해당 폴더 삭제
return
def delete_folder(request, foldername):
username = request.user.username
dir = username + '/' + foldername
delete_ff(foldername, username) # 로컬 DB에서 폴더 삭제
MediaStorage.delete_folder(dir) # s3에서 폴더 삭제
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
# url 원하는 형식으로 바꿔주기 위함
def url_convert(url):
url = str(url)
temp = url.split('/')
temp.pop(0);temp.pop(0);temp.pop(0)
temp.pop(0);
temp.pop(0);
temp.pop(0)
dir = ''
for i in temp:
dir += i + '/'
dir = dir[:-1]
return dir
......
......@@ -50,7 +50,7 @@
<td><p href="", >{{ folderRow.last_view_TM }}</p></td>
<td ><p href="",>{{ folderRow.isFavor }}</p></td>
<td ><p href="",>{{ folderRow.fileSize }}</p></td>
<td ><p href="",></p></td>
<td ><a href="/delete_folder/{{ folderRow.dir_name }}"><img class = 'trash_icon' src= "{% static 'resources/trashcan.png' %}" width="50" height="50"/></a></td>
</tr>
{% endfor %}
</tbody>
......@@ -88,7 +88,7 @@
<script src="{% static 'js/dropzone.js' %}"></script>
<script type="text/javascript">
Dropzone.options.dropzone = {
maxFilesize: 100000000, // Mb
maxFilesize: 1024, // Mb
init: function() {
this.on('success', function(){
if (this.getQueuedFiles().length == 0 && this.getUploadingFiles().length == 0) {
......
......@@ -26,6 +26,8 @@
<td width=100><p href="",>{{ folderRow.last_view_TM }}</p></td>
<td width=100><p href="",>{{ folderRow.isFavor }}</p></td>
<td width=100><p href="",>{{ folderRow.fileSize }}</p></td>
<td ><a href="/delete_folder/{{ folderRow.dir_name }}"><img class = 'trash_icon' src= "{% static 'resources/trashcan.png' %}" width="50" height="50"/></a></td>
</tr>
{% endfor %}
</tbody>
......