首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用file存储检索的争用文件

使用file存储检索的争用文件
EN

Stack Overflow用户
提问于 2011-04-09 07:04:06
回答 2查看 302关注 0票数 0

我有表单上传和处理程序,它允许下载从from商店上传的文件。问题是,当我单击任何相关字段的下载按钮时,它每次都会下载相同的文件。也就是说,我上传了3个文件( 1.txt,2.txt,3.txt),每当我单击另一个下载按钮时,它总是只下载1.txt。您可以在http://my77notes.appspot.com/show上看到它(或者首先在http://my77notes.appspot.com/upload上上传自己的文件)。当我研究过源代码时,它会为每个隐藏字段显示不同的键。我做错什么了?

这是我的档案:

模板文件:

代码语言:javascript
复制
<h2>Files uploaded to Blobstore</h2>
<table border="3">
    <tr>
        <td>#</td>
        <td>Filename</td>
        <td>Content-Type</td>
        <td>Creation</td>
        <td>Size</td>
        <td>Download</td>
    </tr>
<form id="show_blob" name="show_blob" method="post" action="{{ download_blob }}">
    {% for file in blob_files %}
    <tr>
        <td>{{ loop.index }}</td>
        <td>{{ file.filename }}</td>
        <td>{{ file.content_type }}</td>
        <td>{{ file.creation }}</td>
        <td>{{ file.size }}</td>
        <td>
            <input type="submit" name="download" value="Download"/>
            <input type="hidden" name="blobkey" value="{{ file.key() }}" />
        </td>
    </tr>
    {% endfor %}
</form>
</table>

handler.py

代码语言:javascript
复制
class BlobstoreServeHandler(RequestHandler, BlobstoreDownloadMixin):
    def post(self):
        blob_info = blobstore.BlobInfo.get(self.request.form.get('blobkey'))
        return self.send_blob(blob_info, save_as=True)

urls.py

代码语言:javascript
复制
rules = [
        Rule('/', endpoint='index', handler='apps.77notes.handlers.IndexPageHandler'),
        Rule('/upload', endpoint='upload/html', handler = 'apps.77notes.handlers.BlobstoreUploadFormHandler'),
        Rule('/upload/handler', endpoint='upload/handler', handler='apps.77notes.handlers.UploadHandler'),
        Rule('/download', endpoint='download/html', handler = 'apps.77notes.handlers.BlobstoreDownloadFormHandler'),
        Rule('/download/file', endpoint='download/file', handler='apps.77notes.handlers.BlobstoreServeHandler'),
        Rule('/show', endpoint='show/html', handler='apps.77notes.handlers.ShowUploadedFilesHandler'),
]

变量

代码语言:javascript
复制
blob_files = uploaded_files_to_blobstore = blobstore.BlobInfo.all()
download_blob = self.url_for('download/file')

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-04-09 07:51:20

当然总是第一次。您正在声明三个名称相同但值不同的隐藏字段。服务器如何理解您想要“与我单击的下载按钮最近的隐藏字段”?

你可以用Javascript来做这件事,但这太过分了。也许您应该为每个项目创建表单,但我不确定它是否有效。

代码语言:javascript
复制
{% for file in blob_files %}
<tr>
    <!-- stuff -->
    <td><form class="show_blob" name="show_blob" method="post" action="{{ download_blob }}">
        <input type="submit" name="download" value="Download" />
        <input type="hidden" name="blobkey" value="{{ file.key() }}" />
    </form></td>
</tr>
{% endfor %}

如果您不喜欢这种情况,还可以在“下载提交”按钮中提供所需的blobkey索引。就像这样:

代码语言:javascript
复制
{% for file in blob_files %}
<tr>
    <!-- stuff -->
    <td>
        <input type="submit" name="dl{{ loop.counter0 }}" value="Download" />
        <input type="hidden" name="blobkey" value="{{ file.key() }}" />
    </td>
</tr>
{% endfor %}

然后,服务器端,您可以使用以下方法获得正确的blobkey:

代码语言:javascript
复制
# don't forget to handle errors here, NTUI
ind = int([_[2:] for _ in self.request.form if _.startswith('dl')][0])
blobkeys = self.request.form.getlist('blobkey')
blobkey = blobkeys[ind]

# stuff
票数 0
EN

Stack Overflow用户

发布于 2011-06-21 12:14:44

如果您要通过表单下载什么,那么您需要执行与blob一样多的表单。

代码语言:javascript
复制
{% for file in blob_files %}
<tr>
    <td>{{ loop.index }}</td>
    <td>{{ file.filename }}</td>
    <td>{{ file.content_type }}</td>
    <td>{{ file.creation }}</td>
    <td>{{ file.size }}</td>
    <td>
        <form id="show_blob" name="show_blob" method="post" action="{{ download_blob }}">
        <input type="submit" name="download" value="Download"/>
        <input type="hidden" name="blobkey" value="{{ file.key() }}" />
        </form>
    </td>
</tr>
{% endfor %}

或者你可以用普通的一个标签来做,比如这个<a href = '/get/{{ file.key() }}'>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5603443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档